2011-12-08 209 views
2

我已經通過了Ç$_GET可變值,這是我要查找一個數組作爲值和檢索他們的鑰匙。如何在數組中搜索以返回準確的鍵?搜索按值陣列和返回鍵

下面

<?php 

$array1 = array(0 => 'a', 1 => 'c', 2 => 'c'); 
$array2 = array(0 => '3', 1 => '2', 2 => '3'); 

$key1 = array_search('c', $array1); 
$key2 = array_search('3', $array2); 

?> 

回報

$key1 = 1; 
$key2 = 0; 

的代碼,雖然我期待

$key1 = 2; 
$key2 = 2; 
+1

這是一個準確的結果的緣故,因爲這些鍵的值分別爲你正在尋找。你的標準是你想要找到具有該值的* last *鍵嗎?沒有更好的方法來做任何你想做的事情嗎? – deceze

+0

什麼不準確? – alex

+0

我想要$ array1和$ array2中的那些鍵匹配在一起,導致兩個數組都鏈接到執行sql過程。如果傳遞值爲'c'和'3',則它必須匹配,兩個返回鍵都必須是$ key1 = 2和$ key2 = 2。 – conmen

回答

4
foreach ($array1 as $key => $value) { 
    if ($value == 'c' && $array2[$key] == '3') { 
     echo "The key you are looking for is $key"; 
     break; 
    } 
} 

我敢肯定有一個更理智的方式做任何你想要做雖然。

+0

是啊!這就是我想要的..非常感謝你! – conmen

3

函數返回正是因爲它應該有。值爲'c'的第一次出現位於$ array1中的索引1處,並且值'3'在$ array2中位於索引0處第一次出現

此行爲記錄在the php docs on array_search中,它甚至爲您提供了一個替代方法if你不喜歡它:

如果在haystack中發現不止一次針,則返回第一個匹配鍵 。要返回所有匹配值的鍵,請使用帶有可選search_value參數的 array_keys()。

0

如果您想查找具有該值的最後一個鍵,則可以先倒轉數組。

$array1 = array(0 => 'a', 1 => 'c', 2 => 'c'); 
$array2 = array(0 => '3', 1 => '2', 2 => '3'); 

$key1 = array_search('c', $array1); 
$key2 = array_search('3', $array2); 

var_dump($key1,$key2); //output: int(1) int(0) 


$key1 = array_search('c', array_reverse($array1, true)); 
$key2 = array_search('3', array_reverse($array2, true)); 

var_dump($key1,$key2); //output: int(2) int(2) 
+0

未找到最後一個鍵,而是查找從先前輸入傳遞的值鍵,值可以是'c'和'2',因爲這些鍵是首次匹配,所以這些鍵被返回正確。 – conmen

0

也許是這樣的:

<?php 
// for specificly 2 arrays 
function search_matching($match1, $match2, array $array1, array $array2) { 
    foreach($array1 as $key1 => $value1) { 
     // we may want to add $strict = false argument to distinguish between == and === match 
     // see http://php.net/manual/en/function.array-search.php 
     if($value1 == $match1 and isset($array2[$key1]) and $array2[$key1] == $match2) { 
      return $key1; 
     } 
    } 

    return null; 
} 


// unlimited 
function search_matching(array($matches), array $array/*, ...*/) { 
    if(count($matches) != func_num_args() - 1) 
     throw new \Exception("Number of values to match must be the same as the number of supplied arrays"); 

    $arrays = func_get_args(); 
    array_shift($arrays); // remove $matches 
    $array = array_unshift($arrays); // array to be iterated 

    foreach($array as $key => $value) { 
     if($value == $matches[0]) { 
       $matches = true; 

       foreach($arrays as $keyA => $valueA) { 
        if(! isset($arrays[$key] or $valueA != $matches[$keyA+1]) { 
         $matches = false; 
         break; 
        }     
       } 

       if($matches) 
        return $key; 
     } 
    } 

    return null; 
} 

功能都考慮了數字鍵創建。

他們可以作出通過卸載一些功能等功能的清潔劑,但我想保持它的簡潔和在一起容易看到它是如何工作的