Comment faire pour ne garder que spécifique tableau de clés/valeurs dans la gamme?
J'ai un tableau multidimensionnel que je suis à la recherche d'auge pour des valeurs spécifiques.
Si ces valeurs sont trouvées j'ai besoin d'extraire les indices avec ces valeurs ( faire de nouveaux array ) et supprimer tous les autres.
array_intersect a bien fonctionné sur php 5.3 , maintenant 5.4 il se plaint Avis: Tableau de conversion de chaîne de caractères.
J'ai trouvé que array_intersect a un problème avec un tableau multidimensionnel sur la 5.4.
https://bugs.php.net/bug.php?id=60198
C'est tableau $options je suis à la recherche d'auge
Array (
[index1] => html
[index2] => html
[index3] => slide
[index4] => tab
[index5] => Array
(
[0] => 123
)
)
code qui fonctionne sur php 5.3.x
$lookfor = array('slide', 'tab');
$found = array_intersect($options, $lookfor);
print_r($found);
Array
(
[index3] => slide
[index4] => tab
)
mais dans 5.4.x cette trows l'erreur mentionnée ci-dessus.
Ce serait un autre moyen de le faire sans une boucle s'il vous plaît.
et sans la suppression de l'erreur.
Merci!
- Pourquoi ne pouvez-vous pas utiliser le code actuel? vous devriez être la suppression de toutes les erreurs qui auraient pu être affiché à l'utilisateur final de toute façon, et il suffit de ne pas enregistrer ces.
- pendant que vous étiez en tapant j'ai édité mon post. Je ne veux pas supprimer l'erreur. voudrais trouver une solution plutôt que de cacher les avis via @
- Ce qui vous empêche de simplement en utilisant une boucle?
- tableau a plus de 200 options, donc je préfère ne pas en boucle fosse toutes
- Le faire. Ensuite, le profil de votre code à l'aide de xdebug ou xhprof. Je vous assure que le simple fait de parcourir un tableau avec 200 éléments, il ne sera pas même une goutte dans le seau de performance. Que pensez-vous
array_intersect
(etarray_filter
ci-dessous) n'?
Vous devez vous connecter pour publier un commentaire.
array_intersect()
n'est pas récursive. La fonction suppose que le tableau est d'un niveau de profondeur et attend de tous les éléments du tableau pour être des scalaires. Lorsqu'il détecte une non-valeur scalaire, c'est à dire un sous-ensemble, il jette un Avis.C'est vaguement mentionné dans le documentation de
array_intersect()
:Une solution, je pense à utiliser
array_filter()
:Remarque: Ce encore effectue une boucle et n'est pas mieux qu'un simple
foreach
. En fait, il pourrait être plus lent qu'unforeach
si le tableau est grand. Je n'ai aucune idée de pourquoi vous êtes en essayant d'éviter les boucles — personnellement, je pense que ce serait plus propre si vous venez d'utiliser une boucle.Démo
Une autre solution, je pense à supprimer les sous-ensembles avant d'utiliser
array_intersect()
:Démo
foreach
est susceptible d'être plus rapide la plupart du temps. Avec de grands tableaux, l'utilisation maximale de la mémoire de laarray_*()
fonctions peuvent être 2,5 fois plus que laforeach
boucle.array_intersect
. Voir la démo.vous pouvez utiliser array_filter()
ce sera rerturn index1, index2 et index3.
edit: viens de lire votre commentaire que votre tableau va contenir beaucoup d'entrées.
array_filter
sera bien sûr de la boucle avec une condition au-dessus d'eux et de créer un nouveau tableau.