Comment rechercher Array plusieurs valeurs en PHP?
-
06-07-2019 - |
Question
Je dois obtenir les clés des valeurs en double. J'ai essayé d'utiliser array_search et cela a bien fonctionné, MAIS je n'ai obtenu que la première valeur en tant que hit.
Je dois obtenir les deux clés à partir des valeurs en double, dans ce cas 0 et 2. Le résultat de la recherche sous forme de tableau serait bon.
Existe-t-il une fonction PHP pour ce faire ou dois-je écrire plusieurs boucles pour le faire?
$list[0][0] = "2009-09-09";
$list[0][1] = "2009-05-05";
$list[0][2] = "2009-09-09";
$list[1][0] = "first-paid";
$list[1][1] = "1";
$list[1][2] = "last-unpaid";
echo array_search("2009-09-09",$list[0]);
La solution
Vous voulez array_keys avec la valeur de recherche
array_keys($list[0], "2009-09-09");
qui retournera un tableau des clés avec la valeur spécifiée, dans votre cas [0, 2]. Si vous souhaitez également rechercher les doublons, vous pouvez d'abord effectuer une passe avec array_unique , puis parcourez ce tableau en utilisant array_keys sur l'original; tout ce qui retourne un tableau de longueur > 1 est un doublon et le résultat est la clé dans laquelle les doublons sont stockés. Quelque chose comme ...
$uniqueKeys = array_unique($list[0])
foreach ($uniqueKeys as $uniqueKey)
{
$v = array_keys($list[0], $uniqueKey);
if (count($v) > 1)
{
foreach ($v as $key)
{
// Work with $list[0][$key]
}
}
}
Autres conseils
Dans array_search ()
, nous peut lire:
Si une aiguille est trouvée dans une botte de foin plus qu’une fois, la première clé correspondante est revenu. Pour rendre les clés pour tous valeurs correspondantes, utilisez
array_keys ()
avec le paramètre facultatifsearch_value
à la place.
La combinaison suivante d'appels de fonction vous donnera toutes les valeurs en double:
$a = array(1, 1, 2, 3, 4, 5, 99, 2, 5, 2);
$unique = array_unique($a); // preserves keys
$diffkeys = array_diff_key($a, $unique);
$duplicates = array_unique($diffkeys);
echo 'Duplicates: ' . join(' ', $duplicates) . "\n"; // 1 2 5
Vous pouvez y parvenir avec array_search ()
en utilisant en tant que
loop et la solution suivante:
while (($key = array_search("2009-09-09", $list[0])) !== FALSE) {
print($key);
unset($list[0][$key]);
}
Source: cue à openxbox sur php.net
Pour un tableau unidimensionnel, vous pouvez utiliser la fonction suivante à cette fin (au lieu de array_keys ()
):
function array_isearch($str, $array){
$found = array();
foreach ($array as $k => $v) {
if (strtolower($v) == strtolower($str)) {
$found[] = $k;
}
}
return $found;
}
Source: robertark, php.net
Le manuel PHP indique dans le < code> Valeur de retour de la documentation de la fonction array_search ()
que vous pouvez utiliser array_keys ()
pour accomplir cela. Vous devez juste fournir le deuxième paramètre:
$keys = array_keys($list[0], "2009-09-09");