2009-07-31 8 views
18

Potrzebuję uzyskać klucze od wartości, które są duplikaty. Próbowałem użyć array_search i to działało dobrze, ale otrzymałem tylko pierwszą wartość jako hit.Jak wyszukiwać tablicę dla wielu wartości w PHP?

Potrzebuję uzyskać oba klucze od zduplikowanych wartości, w tym przypadku 0 i 2. Wynik wyniku wyszukiwania jako tablica byłby dobry.

Czy istnieje funkcja PHP, aby to zrobić, czy muszę napisać kilka pętli wielokrotnych, aby to zrobić?

$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]); 

Odpowiedz

25

Chcesz array_keys z wartością wyszukiwania

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

która zwraca tablicę kluczy z podanej wartości, w przypadku [0, 2]. Jeśli chcesz znaleźć również duplikaty, możesz najpierw przejść z array_unique, następnie iterować po tej tablicy używając array_keys na oryginale; wszystko, co zwraca tablicę o długości> 1, jest duplikatem, a wynikiem są klucze, w których przechowywane są duplikaty. Coś jak ...

$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

Dzięki! Kopiuję wklejony pierwszy wiersz kodu. Działa jak oczekiwano. –

+0

array_keys Bardziej pomoże – raftaar1191

8

W array_search() możemy przeczytać:

Jeśli igła znajduje się w stogu siana więcej niż raz pierwszy pasujący klucz jest zwrócone. Aby zwrócić klucze pasujące do wszystkich pasujących wartości, należy zamiast tego użyć parametru array_keys() z opcją opcjonalnego parametru search_value.

+0

tablica jest tak (0 = > (student_id => 10215, roll_no => 23), 1 => (......)) Jak przeszukać student_id klucza, który ma rolkę nr. 23. –

7

Poniższa kombinacja wywołań funkcji daje wszystkie zduplikowane wartości:

$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

Można to osiągnąć stosując za pomocą while pętlę i następującą obejście :

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

Źródło: cue at openxbox at php.net

Na jednym wielowymiarowej tablicy, można użyć następujące funkcje w celu uzyskania, że ​​(jako alternatywa array_keys())

function array_isearch($str, $array){ 
    $found = array(); 
    foreach ($array as $k => $v) { 
    if (strtolower($v) == strtolower($str)) { 
     $found[] = $k; 
    } 
    } 
    return $found; 
} 

Źródło: robertark, php.net

Powiązane problemy