以下是我从CMS功能返回的数据:
array (
0 =>
stdClass::__set_state(array(
'term_id' => '31',
'parent' => '26'
)),
1 =>
stdClass::__set_state(array(
'term_id' => '3',
'parent' => '0'
)),
2 =>
stdClass::__set_state(array(
'term_id' => '32',
'parent' => '26'
)),
3 =>
stdClass::__set_state(array(
'term_id' => '33',
'parent' => '26'
)),
4 =>
stdClass::__set_state(array(
'term_id' => '34',
'parent' => '26'
)),
5 =>
stdClass::__set_state(array(
'term_id' => '26',
'parent' => '3'
)),
我需要将上面的内容转换为以下格式:
Array
(
[0] => Array
(
3
)
[1] => Array
(
26
)
[2] => Array
(
31
32
33
34
)
)
让我解释一下。源中的每个项目都是一个术语。每个字词都有一个ID (term_id)
和一个父(parent)
。如果父== 0,它没有父级并且是级别0.级别0的任何子项都是级别1,依此类推。
我想要返回的是一个数组,它包含该级别的所有级别及其ID。
请注意,这只是示例数据,每个级别上可能有更多级别和任意数量的ID。
所以使用PHP我如何实现我的目标?
答案 0 :(得分:4)
假设有效的结构(没有孤儿等),可以循环数据并拔出每个下一级,直到不再有数据为止:
$output = array();
$current = array( 0 );
$index = 0;
while ( ! empty( $data ) ) {
$parents = $current;
$current = array();
$output[$index] = array();
foreach ( $data as $key => $term ) {
if ( in_array( $term->parent, $parents ) ) {
$output[$index][] = $term->term_id;
$current[] = $term->term_id;
unset( $data[$key] );
}
}
$index ++;
}
var_dump( $output );
答案 1 :(得分:1)
快速地将这个鞭打起来,有点脏,但我认为这就是你需要的。
答案 2 :(得分:0)
我认为您需要更多数据。例如,父= 26的对象是2级。你现在怎么样?你需要有另一个数组,你将拥有parent_id及其级别。然后你可以遍历数组并构建你想要的东西。如果这是多维数组,您可以使用array_walk_recursive