我试图显示这些信息很多次,我已经遍布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“。
请有人帮忙吗?三江源。
答案 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']; ?>
[0]
获取顶级数组的第一个条目[1]
获取该数组的第二个条目['CanViewAdminCP']
获取第三级数组的键控值['Type']
然后获取第四级数组的键控值尝试使用此嵌套循环来了解嵌套数组的工作原理:
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";
?>