2009-07-31 8 views
18

Je dois récupérer les clés des valeurs qui sont en double. J'ai essayé d'utiliser array_search et cela a bien fonctionné, MAIS j'ai seulement obtenu la première valeur en tant que coup.Comment rechercher un tableau pour plusieurs valeurs en PHP?

Je dois obtenir les deux clés à partir des valeurs dupliquées, dans ce cas 0 et 2. Le résultat de la recherche sous la forme d'un tableau serait bon.

Y at-il une fonction PHP pour le faire ou ai-je besoin d'é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]); 

Répondre

25

Vous voulez array_keys avec la valeur de recherche

array_keys($list[0], "2009-09-09"); 

qui retourne un tableau des touches avec la valeur spécifiée, dans votre cas [0, 2]. Si vous souhaitez également trouver les doublons, vous pouvez d'abord effectuer un passage 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] 
    } 

    } 
} 
+0

Merci! J'ai copié collé la première ligne de code. Cela fonctionne comme prévu. –

+0

array_keys Sera plus utile – raftaar1191

8

En array_search() on peut lire:

Si l'aiguille se trouve dans botte de foin plus une fois, la première clé correspondante est retourné. Pour renvoyer les clés pour toutes les valeurs correspondantes , utilisez array_keys() avec à la place le paramètre search_value en option .

+0

un tableau est comme ça (0 = > (student_id => 10215, roll_no => 23), 1 => (......)) Comment faire une recherche sur le student_id de la clé qui a un numéro de rouleau. 23. –

7

La combinaison suivante des 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 
2

Vous pouvez y parvenir en utilisant en utilisant la boucle while et la solution suivante :

while (($key = array_search("2009-09-09", $list[0])) !== FALSE) { 
    print($key); 
    unset($list[0][$key]); 
} 

Source: cue at openxbox at php.net

Pour tableau à une multidimensionnelle, 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