【问题标题】:Find a given value and return the key查找给定值并返回键
【发布时间】:2015-04-25 22:57:00
【问题描述】:

我想找到一个给定的值并返回键,我尝试了很多方法来解决这个问题,但都没有奏效。 我花了很多时间测试不同的解决方案,但到目前为止没有运气,但这是一个如此简单的任务。 以下是我尝试过的一些函数,但没有一个返回正确的键:(在这种情况下应该是 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
                 )
            )
        )
    )

【问题讨论】:

标签: php arrays foreach


【解决方案1】:

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

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

你在第三次也犯了上述错误。

第四个太复杂了。最好的事情是您从第二个条件中删除第一个条件。

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

【讨论】:

  • Hi Darshan Jain 不幸的是,即使删除了第一个条件,它仍然返回“4”。我认为这与 $key '0' 有关,当密钥为 0 时它会失败。
  • 我认为这不应该发生。你在粘贴你的确切代码吗@Renny
【解决方案2】:

好的,我想出了一个解决方案。

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']里面的大小写不一样?
  • 你能删除strtolower() 并告诉你会发生什么吗?
  • 嗨,我的错,上面的例子应该是 MP_001,所以需要包含 strtolower 才能完全匹配。
  • 大声笑。这就是为什么它不起作用。如果您理解了,请接受我们/我的回答
猜你喜欢
  • 2016-10-23
  • 2016-08-25
  • 1970-01-01
  • 2016-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-14
相关资源
最近更新 更多