简化php树状数组的方法:首先使用“array_walk_recursive”函数递归处理数组元素;然后使用“array_reverse”方法翻转得到一维数组即可达到简化php树状数组的效果。
如何简化php树状数组 ?
问题:
下面是一段非常复杂的树状数组
如何提取所有的[name]值, 按倒序简化保存到一个一维数组Array
(
[0] => Array
(
[id] => 1
[pid] =>
[name] => admin
[children] => Array
(
[0] => Array
(
[id] => 58
[pid] => 1
[name] => 000c
[children] => Array
(
[0] => Array
(
[id] => 72
[pid] => 58
[name] => 000c1
[children] => Array
(
[0] => Array
(
[id] => 93
[pid] => 72
[name] => 000c11
)
[1] => Array
(
[id] => 96
[pid] => 72
[name] => 000c12
)
)
)
[1] => Array
(
[id] => 81
[pid] => 58
[name] => 000c2
[children] => Array
(
[0] => Array
(
[id] => 99
[pid] => 81
[name] => 000c21
)
[1] => Array
(
[id] => 101
[pid] => 81
[name] => 000C22
)
)
)
[2] => Array
(
[id] => 87
[pid] => 58
[name] => 000c3
[children] => Array
(
[0] => Array
(
[id] => 104
[pid] => 87
[name] => 000C31
)
[1] => Array
(
[id] => 108
[pid] => 87
[name] => 000C32
)
)
)
)
)
[1] => Array
(
[id] => 44
[pid] => 1
[name] => ???
)
[2] => Array
(
[id] => 45
[pid] => 1
[name] => ??
)
[3] => Array
(
[id] => 46
[pid] => 1
[name] => ??
)
[4] => Array
(
[id] => 49
[pid] => 1
[name] => only
)
[5] => Array
(
[id] => 52
[pid] => 1
[name] => 007?
)
[6] => Array
(
[id] => 53
[pid] => 1
[name] => 0001e
[children] => Array
(
[0] => Array
(
[id] => 54
[pid] => 53
[name] => 000e1
[children] => Array
(
[0] => Array
(
[id] => 130
[pid] => 54
[name] => 000e11
)
[1] => Array
(
[id] => 131
[pid] => 54
[name] => 000e12
)
)
)
[1] => Array
(
[id] => 73
[pid] => 53
[name] => 000e2
[children] => Array
(
[0] => Array
(
[id] => 125
[pid] => 73
[name] => 000e21
[children] => Array
(
[0] => Array
(
[id] => 154
[pid] => 125
[name] => gfhgfhgf
)
[1] => Array
(
[id] => 155
[pid] => 125
[name] => hgfhgf
)
[2] => Array
(
[id] => 156
[pid] => 125
[name] => fghfgh
[children] => Array
(
[0] => Array
(
[id] => 157
[pid] => 156
[name] => fghfghf
)
[1] => Array
(
[id] => 158
[pid] => 156
[name] => hgfghff
)
[2] => Array
(
[id] => 159
[pid] => 156
[name] => rygfgfg
)
[3] => Array
(
[id] => 160
[pid] => 156
[name] => dgdfgd
[children] => Array
(
[0] => Array
(
[id] => 161
[pid] => 160
[name] => ghgjhgjh
)
[1] => Array
(
[id] => 162
[pid] => 160
[name] => ghfhgfhgf
)
[2] => Array
(
[id] => 163
[pid] => 160
[name] => ghfhgfgh
)
)
)
)
)
[3] => Array
(
[id] => 164
[pid] => 125
[name] => 000e211
)
)
)
[1] => Array
(
[id] => 126
[pid] => 73
[name] => 000e22
[children] => Array
(
[0] => Array
(
[id] => 136
[pid] => 126
[name] => rtyrtyrtyr
)
[1] => Array
(
[id] => 137
[pid] => 126
[name] => fghfghfhgf
)
[2] => Array
(
[id] => 138
[pid] => 126
[name] => fdgfdgfd
)
[3] => Array
(
[id] => 139
[pid] => 126
[name] => dfdgfd
)
[4] => Array
(
[id] => 140
[pid] => 126
[name] => fghfhgfg
)
[5] => Array
(
[id] => 141
[pid] => 126
[name] => hgfhgfhf
)
[6] => Array
(
[id] => 142
[pid] => 126
[name] => gfhfghfhgf
)
[7] => Array
(
[id] => 143
[pid] => 126
[name] => ghfghff
)
[8] => Array
(
[id] => 144
[pid] => 126
[name] => fghfhgf
)
)
)
)
)
)
)
)
)
)
方法:
使用array_walk_recursive 递归处理数组元素, 并使用array_reverse翻转得到一维数组:<?php
$data = [
[
'id' => 1,
'pid' => 1,
'name' => 'admin',
'children' => [
[
'id' => 158,
'pid' => 1,
'name' => '000c',
'children' => [
['id' => 93, 'pid' => 72, 'name' => '000c11'],
['id' => 96, 'pid' => 72, 'name' => '000c12'],
]
]
]
]
];
$result = array();
array_walk_recursive($data, function($value, $key) use(&$result) {
if ('name' == $key)
$result[] = $value;
});
$result = array_reverse($result); // 翻转数组
下面拓展一个以id排序的方法, 仅供参考:$data = [
[
'id' => 1,
'pid' => 1,
'name' => 'admin',
'children' => [
[
'id' => 158,
'pid' => 1,
'name' => '000c',
'children' => [
['id' => 93, 'pid' => 72, 'name' => '000c11'],
['id' => 96, 'pid' => 72, 'name' => '000c12'],
]
]
]
]
];
class MaxHeap extends SplMaxHeap {
public function compare($array1, $array2)
{
if ($array1[1] === $array2[1]) return 0;
return $array1[1] < $array2[1] ? -1 : 1;
}
}
function walk_sort($maxHeap, $value) {
$maxHeap->insert([$value['name'], $value['id']]);
if (isset($value['children'])) {
foreach ($value['children'] as $children) {
walk_sort($maxHeap, $children);
}
}
}
$maxHeap = new MaxHeap();
foreach ($data as $value) {
walk_sort($maxHeap, $value);
}
foreach ($maxHeap as $value) {
echo "- ", $value[0], "\n";
}
更多相关技术知识,请访问PHP中文网!
本文原创发布php中文网,转载请注明出处,感谢您的尊重!