我正在尝试根据值将数组项移动到子数组中,例如:
Array
(
[0] => Array
(
[Desc] => 'Sub category'
[SubID] => null
)
[1] => Array
(
[Desc] => 'Listed item 1'
[SubID] => 1
)
[2] => Array
(
[Desc] => 'Listed item 2'
[SubID] => 1
)
[3] => Array
(
[Desc] => 'Item with no sub category'
[SubID] => null
)
)
将成为:
Array
(
[0] => Array
(
[Desc] => 'Sub category'
[SubID] => null
[SubSections] => Array
(
[Desc] => 'Listed item 1'
[SubID] => 1
)
[2] => Array
(
[Desc] => 'Listed item 2'
[SubID] => 1
)
)
[3] => Array
(
[Desc] => 'Item with no sub category'
[SubID] => null
)
)
抱歉,我不确定最好的描述方式,但是希望上面的例子有意义。
谢谢!
<?
foreach($arr as $index=>$subArr){
if($subArr['SubID']){
$arr[$subArr['SubID']-1]['SubSections'][] = $subArr;
unset($arr[$index]);
}
}
?>
我认为这可以完成工作。也许会暗示一些精简的修改
我几乎没有裁剪您的示例了:),在数组[0] => title, [1] => parent
中>
原始数组将被更改。<?php $arr = array( 1 => array( '1', 2), 2 => array( '2', 0), 3 => array( '3', 1), 4 => array( '4', 1), ); $result = array(); foreach( $arr as $key => &$item){ // Root element if( $item[1] == 0){ $result[] = &$item; continue; } // Any other element if( !isset( $arr[ $item[1]])){ die( 'Missing index'); } // Initialize new child elements or append to existing list if( !isset( $arr[ $item[1]][2])){ $arr[ $item[1]][2] = array( &$item); } else { $arr[ $item[1]][2][] = &$item; } } print_r( $result);
警告:
注意:我使用0作为根索引,而不是null。在实现示例后意识到这一点。
因此,我的解决方案可能不是最漂亮的,但它基于一个假设,即某个类别可能出现在数组中的某个子项之后,因此我们先找出类别...然后执行另一个循环以填充子类别。
使用此