2009-07-31 14 views
18

Ho bisogno di ottenere le chiavi da valori duplicati. Ho provato a usare array_search e questo ha funzionato bene, MA ho ottenuto solo il primo valore come hit.Come cercare la matrice per più valori in PHP?

Ho bisogno di ottenere entrambe le chiavi dai valori duplicati, in questo caso 0 e 2. L'output del risultato di ricerca come array sarebbe buono.

C'è una funzione PHP per fare questo o devo scrivere alcuni cicli multipli per farlo?

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

risposta

25

Si desidera array_keys con il valore di ricerca

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

che restituirà una matrice dei tasti con il valore specificato, nel tuo caso [0, 2]. Se vuoi trovare anche i duplicati, puoi prima effettuare un passaggio con array_unique, quindi eseguire l'iterazione su quell'array usando array_keys sull'originale; tutto ciò che restituisce una matrice di lunghezza> 1 è un duplicato e il risultato sono le chiavi in ​​cui sono memorizzati i duplicati. Qualcosa di simile ...

$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

Grazie! Copio incollato la prima riga di codice. Funziona come previsto. –

+0

array_keys Sarà più utile – raftaar1191

8

In array_search() possiamo leggere:

Se l'ago si trova in pagliaio più di una volta, la prima chiave di corrispondenza è restituiti. Per restituire le chiavi per tutti i valori di corrispondenza , utilizzare il parametro search_value facoltativo .

+0

un array è così (0 = > (student_id => 10215, roll_no => 23), 1 => (......)) Come faccio a cercare lo studente_id della chiave che ha un rotolo n. 23. –

7

La seguente combinazione di chiamate di funzione vi darà tutti i valori duplicati:

$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

si può ottenere che l'utilizzo utilizzando while loop e la seguente soluzione alternativa :

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

Fonte: cue at openxbox at php.net

Per array mono multidimensionale, è possibile utilizzare la seguente funzione per conseguire tale (in alternativa a array_keys()):

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

Fonte: robertark, php.net

Problemi correlati