Retirez tous les éléments d'un tableau avec les touches numériques
J'ai un tableau qui ressemble à quelque chose comme ceci:
Array
(
[0] => apple
["b"] => banana
[3] => cow
["wrench"] => duck
)
Je veux profiter de ce tableau et utiliser array_filter ou quelque chose de similaire pour supprimer des éléments avec les touches numériques et de recevoir le tableau suivant:
Array
(
[0] => apple
[3] => cow
)
Je pensais à ce sujet, et je ne pouvais pas penser à un moyen de le faire parce que array_filter ne fournit pas de ma fonction avec la touche, et array_walk ne peut pas modifier la structure du tableau (parlé dans le manuel PHP).
Importe-t-il si la clé est une chaîne représentant le nombre? c'est à dire
De préférence, j'aimerais exclure ce cas, simplement parce qu'elle semble plus correct, mais il n'a pas d'importance dans mon application actuelle.
faire plus de travail que nécessaire, n'est jamais "plus correct"
"0"
De préférence, j'aimerais exclure ce cas, simplement parce qu'elle semble plus correct, mais il n'a pas d'importance dans mon application actuelle.
faire plus de travail que nécessaire, n'est jamais "plus correct"
OriginalL'auteur diracdeltafunk | 2012-06-14
Vous devez vous connecter pour publier un commentaire.
À l'aide d'un
foreach
boucle serait approprié dans ce cas:OriginalL'auteur Tim Cooper
Il peut être fait sans avoir à écrire une boucle dans un (long) ligne:
Ne me demandez pas sur les performances.
Comment puis-je vérifier la clé du tableau non numériques. Je suis en train d'essayer avec is_string fonction dans array_filter de rappel, mais d'avoir une erreur
Quelle erreur avez-vous? Comme vous pouvez le voir ici, cela semble fonctionner: 3v4l.org/aj9FD
pour l'amour de la vérité,
array_filter
est en fait une boucle. Vous n'êtes pas "écrire" une boucle, mais intérieurement il est.Si vous choisissez d'utiliser cette réponse, gardez à l'esprit qu'en dépit de
array_intersect_key
avecis_numeric
filtre, vous pouvez simplement utiliseris_string
filtre.OriginalL'auteur smhg
De PHP 5.6, il est désormais possible d'utiliser
array_filter
dans une forme compacte:La démo.
Cette approche est d'environ 20% plus lente qu'une
for
boucle sur ma boîte (1.61 s vs 1.31 s pour 1M d'itérations).array_filter($array, "is_numeric", ARRAY_FILTER_USE_KEY);
OriginalL'auteur bishop
Voici une boucle:
$key !== 0
Parce que !intval(0) est vraie.
OriginalL'auteur Scott Saunders