按值和返回键搜索数组

时间:2011-12-08 06:41:13

标签: php arrays search key

我从$_GET变量传递了 c 3 的值,我想在数组中查找值并检索它们的键。如何在数组中搜索以返回准确的密钥?

以下代码

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

4 个答案:

答案 0 :(得分:4)

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

我很确定有一种更好的方法可以做你想做的事情。

答案 1 :(得分:3)

该函数完全按照应有的方式返回。第一次出现值'c'存在于$ array1中的索引1处,值'3'出现在$ array2中第一次出现在索引0

the php docs on array_search中记录了此行为,如果您不喜欢,它甚至会为您提供替代方案:

  

如果在干草堆中多次找到针头,则第一个匹配的密钥   退回。要返回所有匹配值的键,请使用   array_keys()改为使用可选的search_value参数。

答案 2 :(得分: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)

答案 3 :(得分: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;
}

使用数字键创建函数。

通过将某些功能卸载到其他功能可以使它们变得更干净,但是为了便于看到它的工作方式,我希望将它简洁一致

相关问题