2015-02-24 49 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

相關問題