![](/img/trans.png)
[英]PHP: Group (multidimensional, associative) array and sum values by specific key
[英]list specific key/values in multidimensional array using php
我有一個只讀的多維關聯數組,我需要從中提取特定值以生成具有某些值的輸出。
該數組如下所示:
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
這是遞歸函數的開始,它幾乎與您想要的匹配。
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);
}
}
我已經展示了如何過濾掉特定的級別和特定的鍵,但是您可能還需要做更多的事情才能獲得所顯示的確切輸出。
首先,在您的示例中,您僅顯示了“ Retrievers”一次,盡管“ Fido”和“ Spot”實際上來自兩個單獨的“ Retrievers”陣列(4個有腿的獵犬和3個有腿的獵犬)。 我不確定這是否是有意的,如果是,則不確定該規則應如何工作。
其次,您將顯示“ Big Dogs”,就好像它是頂級數組的鍵一樣,而實際上它是該數組中子項之一的“ Name”值。 同樣,如果這是有意的,我不確定要確定要顯示什么以及如何顯示的規則。
如果此答案不足以讓您自己解決其余問題,則需要提供更多示例數據和示例輸出,以便我可以准確確定您要實現的目標。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.