找到给定的值并返回密钥

时间:2015-02-24 10:49:31

标签: php arrays foreach

我想找到一个给定的值并返回密钥,我已经尝试了很多方法来解决这个问题但没有工作。 我花了很多时间测试不同的解决方案但到目前为止没有运气,但这是一项非常简单的任务。 以下是我尝试过的一些函数但没有返回正确的键:(在这种情况下应该是0)

这不会返回任何内容:

 $mapkey = $data['srv']['map_image'];
 $ikey = array_search($mapkey, $data['srv']['maps']);
 if ($ikey !== FALSE) {
 // Match made.
 }

当它应该是'0'时我得到'3',从这一个:

foreach ($data['srv']['maps'] as $key => $value) {
$mapkey = ($data['srv']['map_image']);
    if ($value === $mapkey && $data['srv']['maps'][$key]['map_image'] === $mapkey) {
return $key;
}
}

我从中得不到任何东西,应该是'0':

$mapkey = $data['srv']['map_image'];

foreach ($data['srv']['maps'] as $key => $val) {
if ($val === $mapkey) {
return $key;
}
}

这个完全崩溃了网页:

function recursive_array_search($mapkey,$data) {
    foreach($data['srv']['maps'] as $key=>$val) {
$mapkey = $data['srv']['map_image'];
    $imagekey=$key;
    if($mapkey===$val OR (is_array($val) && recursive_array_search($mapkey,$val) !== false)) {
return $imagekey;
        }
}
return false;
}

$ data数组的示例:

Array
(
[srv] => Array
    (
        [map_name] => map 1 
        [map_image] => MP_001
        [maps] => Array
            (
                [0] => Array
                    (
                        [map_name] => map 1 
                        [map_image] => mp_001
                    )
                [1] => Array
                    (
                        [map_name] => map 2
                        [map_image] => mp_017
                    )
                [2] => Array
                    (
                        [map_name] => map 3
                        [map_image] => mp_014
                    )
                [3] => Array
                    (
                        [map_name] => map 4
                        [map_image] => mp_007
                 )
            )
        )
    )

2 个答案:

答案 0 :(得分:0)

在第一个中,您直接在包含0,1等键的$data['srv']['maps']内搜索。但你必须在所有0,1内进行搜索才能失败。

在第二个中,如果你删除第一个条件,它将起作用。 Bcoz在第一个条件下,您正在将值与数组进行比较($value)是一个数组。

上面的错误你也在做第三次。

第四是太复杂了。最好的是你从第二个条件中移除第一个条件。

更新:根据您的更新,为了进行比较,它们应该是相同的情况; - )

答案 1 :(得分:0)

好的我已经找到了解决方案。

foreach ($data['srv']['maps'] as $key => $value) {  
$mapkey = strtolower($data['srv']['map_image']);
   if ($mapkey == $data['srv']['maps'][$key]['map_image']) {
       $imgkey = $key;
   }
}
echo '<pre>';
print_r($imgkey);
echo '</pre>';

返回&#39; 0&#39;

我遇到的问题是代码放置的位置以及我无法返回$ key的事实,因为它破坏了其余的代码。