Trop difficile, et je travaille avec des tableaux indexés pas associatif. Dans cette solution clés sont codés en dur. Peut-être plus norme codeforeach ($arr as $key => $val) {} mise en œuvre permettrait de répondre à vos besoins. J'ai besoin de filtrer le tableau d'entrée: si la clé existe dans un autre tableau puis le retour de l'élément. J'ai trouvé array_filter le candidat, mais je ne peux pas obtenir la clé de l'ensemble de la valeur dans le rappel. Qui est: foreach ($t as $k => $v) if (!array_key_exists($k, $valid)) unset($t[$k]) mais semble horrible pour moi... C'est à peu près ce que je pourrais mettre en place ce que vous avez décrit jusqu'à présent.
Je n'aimais pas les autres options proposées ici, si quelqu'un d'autre est à la recherche de cette fonctionnalité, voici une mise en œuvre rapide:
function array_filter_keys($a, $c){
$i=array_filter(array_keys($a), $c);return array_intersect_key($a, array_flip($i));}
Le résultat de cette fonction est exactement ce que cela ressemble, il retournera un tableau filtré par une fonction de rappel qui reçoit les clés plutôt que de les valeurs.
EDIT:
Ce n'est plus un avertissement, après la lecture de certains des autres commentaires je me rends compte que l'OP est en fait tout simplement à la recherche pour array_intersect comme hakre souligné. Je vais laisser cette réponse ici, mais depuis la Fpo question n'est pas clairement état de cette nécessité et cette page s'affiche dans google pour array_filter_keys
À partir de la documentation:
PHP 5.6.0 Ajout d'une option du paramètre flag et constantes ARRAY_FILTER_USE_KEY et ARRAY_FILTER_USE_BOTH
http://php.net/manual/en/function.array-filter.php
OriginalL'auteur hosseio
Dans un précédent commentaire que vous avez indiqué que vous cherchez quelque chose comme ceci:
Donc en fait de supprimer toutes les valeurs de la matrice
$t
qui n'ont pas de clé dans la gamme$valid
.La fonction PHP qui est appelé
array_intersect_key
. L'intersection est égale à la filtrés résultat:OriginalL'auteur hakre
Il n'y a pas moyen de laisser le rappel de
array_filter
d'accès de l'élément clé, ni est-il une fonction similaire qui fait ce que vous voulez.Cependant, vous pouvez écrire votre propre fonction pour cela, comme celle ci-dessous:
OriginalL'auteur K-Gun
Vous pouvez utiliser le array_walk fonction comme discuté ici (3 réponses): est-il possible si la fonction de rappel dans array_filter recevoir paramètre?
Peut-être plus norme
code
foreach ($arr as $key => $val) {} mise en œuvre permettrait de répondre à vos besoins.J'ai besoin de filtrer le tableau d'entrée: si la clé existe dans un autre tableau puis le retour de l'élément. J'ai trouvé
array_filter
le candidat, mais je ne peux pas obtenir la clé de l'ensemble de la valeur dans le rappel.Qui est:
foreach ($t as $k => $v) if (!array_key_exists($k, $valid)) unset($t[$k])
mais semble horrible pour moi...C'est à peu près ce que je pourrais mettre en place ce que vous avez décrit jusqu'à présent.
OriginalL'auteur jondbaker
Je n'aimais pas les autres options proposées ici, si quelqu'un d'autre est à la recherche de cette fonctionnalité, voici une mise en œuvre rapide:
Le résultat de cette fonction est exactement ce que cela ressemble, il retournera un tableau filtré par une fonction de rappel qui reçoit les clés plutôt que de les valeurs.
EDIT:
Ce n'est plus un avertissement, après la lecture de certains des autres commentaires je me rends compte que l'OP est en fait tout simplement à la recherche pour
array_intersect
comme hakre souligné. Je vais laisser cette réponse ici, mais depuis la Fpo question n'est pas clairement état de cette nécessité et cette page s'affiche dans google pour array_filter_keysOriginalL'auteur Trey
À l'aide de la
ARRAY_FILTER_USE_BOTH
constante, vous pouvez obtenir à la fois de la valeur et de la clé :À l'aide de la
ARRAY_FILTER_USE_KEY
constante, vous pouvez obtenir la clé seul :OriginalL'auteur Sybio