web-dev-qa-db-fra.com

Comment rechercher dans Array plusieurs valeurs en PHP?

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]);
21
Jens Törnell

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]
    }

  }
}
28
Adam Wright

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'option search_value paramètre à la place.

10
palindrom

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
7
Till Theis

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

4
kenorb

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");
2
soulmerge