PHP多维数组不提供输出

时间:2018-01-02 01:51:02

标签: php sql

我试图显示这些信息很多次,我已经遍布stackoverflow并且找不到答案,这不是一个重复的问题,这里没有任何解决方案可行。我有一个json数组,它作为字符串存储在数据库中,当它从数据库中取出时,它使用json_decode放入数组中,看起来像这样

 Array
(
    [0] => Array
        (
            [0] => Array
                (
                )

            [1] => Array
                (
                    [CanViewAdminCP] => Array
                        (
                            [Type] => System
                            [Description] => Grants user access to view specific page
                            [Colour] => blue
                        )

                )

        )

)

但是,当我尝试循环这个时,它只返回任何内容,我尝试使用键循环,我尝试过foreach循环,没有任何东西返回值,我希望得到数组键所以“ CanViewAdminCP“然后是该键内的值,例如”Type“和”Description“。

请有人帮忙吗?三江源。

3 个答案:

答案 0 :(得分:1)

使用递归函数递归搜索目标键CanViewAdminCP,如下所示:

function find_value_by_key($haystack, $target_key)
{
  $return = false;

  foreach ($haystack as $key => $value)
  {
    if ($key === $target_key) {
      return $value;
    }

    if (is_array($value)) {
      $return = find_value_by_key($value, $target_key);
    }
  }

  return $return;
}

示例:

print_r(find_value_by_key($data, 'CanViewAdminCP'));

Array
(
    [Type] => System
    [Description] => Grants user access to view specific page
    [Colour] => blue
)

访问this link进行测试。

答案 1 :(得分:0)

你有一个4级多维数组(一个包含数组的数组,其中包含一个包含数组的数组),因此如果要迭代所有键/​​值,则需要四个嵌套循环。

这将直接输出“System”:

<?php echo $myArray[0][1]['CanViewAdminCP']['Type']; ?>
  1. [0]获取顶级数组的第一个条目
  2. [1]获取该数组的第二个条目
  3. ['CanViewAdminCP']获取第三级数组的键控值
  4. ['Type']然后获取第四级数组的键控值
  5. 尝试使用此嵌套循环来了解嵌套数组的工作原理:

    foreach($myArray as $k1=>$v1){
        echo "Key level 1: ".$k1."\n";
        foreach($v1 as $k2=>$v2){
            echo "Key level 2: ".$k2."\n";
            foreach($v2 as $k3=>$v3){
                echo "Key level 3: ".$k3."\n";
            }
        }
    }
    

答案 2 :(得分:0)

请注意以下代码,这些代码在找到第一次出现的密钥后将无法继续,与Tommassos的答案不同。

<?php 

$yourArray = 
array(
    array(
        array(),
        array(
            'CanViewAdminCP' => array(
                'Type' => 'System',
                'Description' => 'Grants user access to view specific page',
                'Colour' => 'blue'
            )
        ),
        array(),
        array(),
        array()
    )
);

$total_cycles = 0;
$count = 0;
$found = 0;

function searchKeyInMultiArray($array, $key) {
    global $count, $found, $total_cycles;
    $total_cycles++;
    $count++;
    if( isset($array[$key]) ) {
        $found = $count;
        return $array[$key];
    } else {
        foreach($array as $elem) {
            if(is_array($elem))
            $return = searchKeyInMultiArray($elem, $key);
            if(!is_null($return)) break;
        }
    }
    $count--;
    return $return;
}


$myDesiredArray = searchKeyInMultiArray($yourArray, 'CanViewAdminCP');

print_r($myDesiredArray);

echo "<br>found in depth ".$found." and traversed ".$total_cycles." arrays";

?>