J'ai besoin d'obtenir les clés à partir de valeurs qui sont des doublons. 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.
J'ai besoin d'obtenir les deux clés à partir des valeurs en double, dans ce cas 0 et 2. La sortie des résultats de la recherche sous forme de tableau serait bonne.
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]);
Vous voulez array_keys avec la valeur de recherche
array_keys($list[0], "2009-09-09");
qui renverra un tableau des clés avec la valeur spécifiée, dans votre cas [0, 2]. Si vous souhaitez également trouver les doublons, vous pouvez d'abord effectuer une passe avec array_unique , puis parcourir ce tableau en utilisant array_keys sur l'original; tout ce qui renvoie un tableau de longueur> 1 est un doublon, et le résultat est les clés dans lesquelles 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]
}
}
}
Dans array_search()
on peut lire:
Si l'aiguille est trouvée dans la botte de foin plus d'une fois, la première clé correspondante est renvoyée. Pour renvoyer les clés de toutes les valeurs correspondantes, utilisez
array_keys()
avec l'optionsearch_value
paramètre à 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 en utilisant array_search()
en utilisant la boucle while
et la solution de contournement suivante:
while (($key = array_search("2009-09-09", $list[0])) !== FALSE) {
print($key);
unset($list[0][$key]);
}
Source: cue sur openxbox sur php.net
Pour un tableau multidimensionnel, vous pouvez utiliser la fonction suivante pour y parvenir (comme alternative à 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 la section Return Value
De la documentation de la fonction array_search()
que vous pouvez utiliser array_keys()
pour ce faire. Il vous suffit de fournir le deuxième paramètre:
$keys = array_keys($list[0], "2009-09-09");