2014-01-10 103 views
0

我有以下代码。基本上我想从上到下搜索这个多维数组的键,但忽略使用由$ignoreKey指定的键的子数组。正如你可以通过"array_key_exists"逻辑看到的那样,它目前是为1D阵列构建的。我尝试了一些例子,但遇到了问题(因此我的一维码如下所示)。递归多维数组搜索但排除某个子数组?

如果一切按计划进行,我会有"thirtyfromgroup1"的呼应。

为了达到这个目的,我需要改变什么?

$keyCheck = "30"; 
$ignoreKey = "group2"; 

if (array_key_exists($keyCheck, $topLevel)) { 
     echo $topLevel[$keyCheck]; 
} 

$topLevel = array( 
      "group1" => array 
           (
           "12" => "twelve", 
           "30" => "thirtyfromgroup1" 
           ), 
      "group2" => array 
           (
           "14" => "fourteen", 
           "30" => "thirty" 
           ), 
      "group3" => array 
           (
           "12" => "twelve", 
           "26" => "thirty" 
           ), 
        ); 
+0

你只是想忽略顶层键数组或子平面呢? – ccKep

回答

3

假设你只是想忽略你的阵列的顶层键,并在第二个层次是刚刚搜索键:

$keyCheck = "30"; 
$ignoreKey = "group2"; 

$topLevel = array( 
    "group1" => array(
     "12" => "twelve", 
     "30" => "thirtyfromgroup1" 
    ), 
    "group2" => array(
     "14" => "fourteen", 
     "30" => "thirty" 
    ), 
    "group3" => array(
     "12" => "twelve", 
     "26" => "thirty" 
    ), 
); 

foreach($topLevel as $topKey => $topValue) 
{ 
    if ($topKey == $ignoreKey) 
     continue; 

    foreach($topValue as $subKey => $subValue) 
    { 
     if ($subKey == $keyCheck) 
      echo $subValue; 
    } 

    /* Alternatively: 

    if (isset($topValue[$keyCheck])) 
     echo $topValue[$keyCheck]; 

    */ 
} 
+0

是的,我不能相信我的大脑在php grrr中找到多维数组有多困难。 – OBV

+0

为什么你使用循环的子数组,而不是只是'isset($ topValue [$ keyCheck])'? – Barmar

+0

@Barmar没有想过,将它作为替代品加入! – ccKep