我从$_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;
答案 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;
}
使用数字键创建函数。
通过将某些功能卸载到其他功能可以使它们变得更干净,但是为了便于看到它的工作方式,我希望将它简洁一致