2015-01-26 24 views
6

Eğer foreach döngüsünden daha iyi (= daha hızlı) bir çözüm var mı?php dizisi içinde arama değeri ve tüm anahtarları al

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

array_search ("kiwi", $ array); Ancak bütün kivi anahtarlarını istiyorum. Bu yüzden 6,7,8'u istiyorum. Bu durumda.

Bruteforce araştırma döngüsü:

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

cevap

14

:) deneyin ve ikinci parametre iğne sağlayan:

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

Sample Output

-1

ayrıca bu durumda array_keys kullanabilirsiniz, bu Alternatif

<?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

bu daha hızlı bir çözümdür? öyle düşünmüyorum –

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