查找给定的值并返回其对应的键

3

我想查找给定的值并返回对应的键,尝试了很多方法但都没有成功。虽然这是一个简单的任务,但我已经花费了很多时间测试不同的解决方案,迄今为止还没有运气。

以下是一些我尝试过的函数,但它们都没有返回正确的键:(在这个例子中应该是0)

这个函数什么也不返回:

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

我从这个地方获得了“3”,但应该是“0”:

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
                 )
            )
        )
    )

第四个似乎你完全混淆了。 - frunkad
嗨,第四个的唯一问题是我直接从PHP手册(http://php.net/manual/en/function.array-search.php)复制粘贴的...它被评为最佳答案? - Renny
2个回答

0

在第一个例子中,您直接搜索包含0、1等键的$data['srv']['maps']。但是您必须在所有的0、1中搜索,所以它失败了。

在第二个例子中,如果您删除第一个条件,它应该可以工作。因为在第一个条件中,您正在将一个值与一个数组进行比较($value是一个数组)。

您在第三个例子中也犯了上述错误。

第四个例子太复杂了。最好的方法是从第二个例子中删除第一个条件。

更新:根据您的更新,用于比较的内容应处于相同的大小写形式;-)


很抱歉,Darshan Jain,即使删除了第一个条件,它仍然返回“4”。我认为这与$key '0'有关,当键为0时它会失败。 - Renny
我认为不应该发生这种情况。你在复制你的准确代码吗,@Renny? - frunkad

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

返回“0”
我的问题是代码放置的位置以及无法返回$key,因为它会破坏其他代码。

$data['srv']['map_image']$data['srv']['maps'][0]['map_image'] 内部的大小写不同吗? - frunkad
你能否移除 strtolower() 并告诉我会发生什么? - frunkad
抱歉,上面的例子应该是MP_001,因此需要包括strtolower进行精确匹配。 - Renny
哈哈,这就是为什么它没有起作用的原因。如果你理解了,那就接受你/我的答案。 - frunkad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接