2015-01-26 5 views
6

Esiste una soluzione migliore (= più veloce) per ottenere tutte le chiavi di valore nella matrice rispetto al ciclo foreach con if?Cerca valore nell'array php e ottieni tutte le chiavi

$array = array('apple', 'orange', 'pear', 'banana', 'apple', 
'pear', 'kiwi', 'kiwi', 'kiwi'); 

print_r ($ array); mi darà:

Array ([0] => apple [1] => orange [2] => pear [3] => banana [4] => apple [5] => pear [6] => kiwi [7] => kiwi [8] => kiwi) 

array_search ("kiwi", $ array); mi darà

Ma io voglio tutte le chiavi del kiwi. Quindi voglio 6,7,8. In questo caso.

Bruteforce ricerca ciclo:

$searchObject = "kiwi"; 
$keys = array(); 
foreach($array as $k => $v) { 
if($v == $searchObject) $keys[] = $k; 
} 

risposta

14

In alternativa, si potrebbe anche usare array_keys in questo caso, e fornendo il secondo parametro ago:

$array = array('apple', 'orange', 'pear', 'banana', 'apple', 'pear', 'kiwi', 'kiwi', 'kiwi'); 
$searchObject = 'kiwi'; 
$keys = array_keys($array, $searchObject); 
print_r($keys); 

Sample Output

-1

Prova questo :)

<?php 
    $array = array('apple', 'orange', 'pear', 'banana', 'apple','pear', 'kiwi', 'kiwi', 'kiwi'); 
    $count = count($array); 
    $str_to_search = 'kiwi'; 
    for($i=0;$i<$count;$i++){ 
     if($array[$i] == $str_to_search){ 
      echo $i.","; 
     } 
    } 
?> 
+1

è quella soluzione più rapida? non la penso così –

1
function array_search_values($m_needle, $a_haystack, $b_strict = false){ 
    return array_intersect_key($a_haystack, array_flip(array_keys($a_haystack, $m_needle, $b_strict))); 
} 

$array = array('apple', 'orange', 'pear', 'banana', 'apple', 
'pear', 'kiwi', 'kiwi', 'kiwi'); 

print_r(array_search_values('kiwi', $array,true));