2011-12-08 97 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; 
} 

功能都考虑了数字键创建。

他们可以作出通过卸载一些功能等功能的清洁剂,但我想保持它的简洁和在一起容易看到它是如何工作的