如何打印通过URL参数检测到的特定阵列的所有子项?

时间:2016-04-05 15:09:33

标签: php arrays multidimensional-array parameters

这是我的阵列:

array(1) {
  ["farm"]=>
  array(1) {
    ["animals"]=>
    array(1) {
      [horses]=>
      array(4) {
        ["fred"]=>
        string(4) "fred"
        ["sam"]=>
        string(4) "sam"
        ["alan"]=>
        string(4) "alan"
        ["john"]=>
        string(4) "john"
      }
    }
  }
}

这是我的网址

mypage.php?id=2&dir=animals

我想打印我的网址参数dir的子项(在这种情况下:动物)

这是我尝试这样做的方式:

 foreach($array as $sub) {
        if ($_GET['dir'] == $sub){
        $result = array_merge($result, $sub);
        echo $result;
        }
}

我的结果:空白页面。

我希望的结果:horses

2 个答案:

答案 0 :(得分:1)

你的阵列:

$arr = array("farm" => 
             array("animals"=>
                   array("horses" => 
                         array("fred" => "fred",
                               "sam" => "sam",
                               "alan" => "alan",
                               "john" => "john")
                        )
                  )
            );

在这里,我做一个用于搜索值的递归函数。

  

如果您搜索fred及其兄弟姐妹,此功能将无效。

$search = 'horses';
get_values($arr);

function get_values($arr){  
    global $search;
    foreach($arr as $key => $value){
        if($key == $search){
            if(is_array($value)){
                echo join(", ", array_keys($value));
            }           
            else{
                echo $value;
            }
        }else{
            get_values($value);
        }       
    }   
}

<强>输出:

  弗雷德,萨姆,艾伦,约翰

答案 1 :(得分:0)

您的$array有一个farm密钥,而farm只包含您的dir个动物。

如果所有内容都在farm中,您可以这样做:

if(!empty($_GET['dir'])) {
  $result = array_merge($result, $array['form'][$_GET['dir']]
}
print_r($result);

我不知道最初的$ result包含哪些内容,但如果不是这种情况,您可以进行调整;如果您在echo $array['form'][$_GET['dir']]中没有多个项目,则可以$result进行调整/ p>