我有一个只读的多维关联数组,我需要从中提取特定值以生成带有一些值的输出。
数组如下所示:
array (
'Dogs' =>
array (
0 =>
array (
'Name' => 'Big Dogs',
'ID' => '32',
'Brown dogs' =>
array (
0 =>
array (
'Name' => '4 legged dogs',
'Retrievers' =>
array (
0 =>
array (
'Name' => 'Fido',
'ID' => '11',
'Owner' => 'Billy',
'IsaBiter' => true,
),
),
),
1 =>
array (
'Name' => '3 legged dogs',
'Retrievers' =>
array (
0 =>
array (
'Name' => 'Spot',
'ID' => '12',
'Owner' => 'Sally',
'IsaBiter' => false,
),
),
),
等。
一个嵌套的foreach循环遍历数组,可以打印数组的所有值,如下所示:
echo "<ul>";
foreach($myArray as $arr1 => $val1) {
foreach($val1 as $arr2 => $val2) {
foreach($val2 as $val3) {
echo "<li>" . $val3 . "<ul>";
foreach($val3 as $arr4 => $val4) {
foreach($val4 as $arr5 => $val5) {
echo "<li>" . $val5;
foreach($val5 as $arr6 => $val6) {
//echo $val6;
foreach($val6 as $arr7 => $val7) {
echo $val7 . "<br />"; //dumps the details
}
echo "</li>";
}
}
}
echo "</ul>";
echo "</li>";
}
}
}
理想情况下,我希望能够1)排除我不想要显示的值(ID,某些数组级别名称等,目前显示全部)和2)显示特定的值(即名称,所有者,IsaBiter)所以我可以格式化结果更清洁,类似于:
Big Dogs
Brown Dogs
Retrievers
Name: Fido
Owner: Billy
IsaBiter: true
Name: Spot
Owner: Sally
IsaBiter: false
答案 0 :(得分:1)
这是递归函数的开始,它接近于你想要的匹配。
function displayArray($array, $level = 0) {
// This filter determines which levels are displayed
$visible = in_array($level, array(0,2,4,6));
if ($visible) {
echo '<ul>';
foreach($array as $key => $value) {
if (is_array($value)) {
echo '<li>';
echo $key;
displayArray($value, $level + 1);
echo '</li>';
}
else {
// This filter determines which non-array keys are displayed
$visible = $level == 6 and in_array($key, array('Name','Owner','IsaBiter'));
if ($visible) {
if (is_bool($value)) $value = $value ? "true" : "false";
echo '<li>';
echo "$key : $value";
echo '</li>';
}
}
}
echo '</ul>';
}
else {
// If a level is not visible, we still try and display child arrays
foreach($array as $key => $value)
if (is_array($value))
displayArray($value, $level + 1);
}
}
我已经展示了如何过滤掉特定级别和特定键,但是你可能需要做更多的事情来获得你所显示的确切输出。
首先,在你的例子中,你只展示了一次“猎犬”,虽然“Fido”和“Spot”实际上来自两个独立的“猎犬”阵列(4条腿回收器和3条腿回收器)。我不确定这是否是故意的,如果是,那该规则应该如何运作。
其次,您将“Big Dogs”显示为顶级数组的键,而实际上它是该数组中某个项的子项的“Name”值。再说一次,如果这是故意的,我不确定是什么规则决定你想要显示什么以及如何显示。
如果这个答案不足以让你自己弄清楚其余部分,那么你需要提供更多的样本数据和样本输出,以便我确切地确定你想要达到的目的。