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]);
Était-ce utile?

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 facultatif search_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");
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top