2015-02-24 52 views
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; 
} 
} 

这一个完全崩溃的网页:$ data数组的

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

实施例:

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

第四个似乎你完全混淆.. – frunkad 2015-02-24 11:28:49

+0

嗨第四个唯一的问题是,我直接从PHP手册复制和粘贴(http://php.net/manual/en/function.array -search.php)....它的评分最高的答案是? – Renny 2015-02-24 14:31:54

回答

0

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

在第二个,如果你删除第一个条件它应该工作。 Bcoz在第一种情况下将数值与数组进行比较($value)是一个数组。

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

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

更新:根据您的更新,比较它们应是相同的情况下;-)

+0

嗨Darshan Jain不幸的是即使第一个条件删除它仍然返回'4'。我认为它与$ key'0'有关,它在一个密钥为0时失败。 – Renny 2015-02-24 11:40:37

+0

我不认为它应该发生。你是否粘贴你的确切代码@Renny – frunkad 2015-02-24 12:19:59

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”

我的问题是代码正在放在哪里,事实上我不能有$键返回它打破了代码的其余部分。

+0

是不是$ data ['srv'] ['map_image']'和$ data ['srv'] ['maps'] [0] ['map_image' ]'是不同的情况? – frunkad 2015-02-25 02:28:45

+0

你能删除'strtolower()'并告诉会发生什么吗? – frunkad 2015-02-25 02:31:11

+0

嗨,我不好,上面的例子应该是MP_001所以strtolower需要包括一个完全匹配。 – Renny 2015-02-25 08:06:29

相关问题