根据值移动到PHP中的子数组

问题描述 投票:1回答:4

我正在尝试根据值将数组项移动到子数组中,例如:

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
    )
) 

抱歉,我不确定最好的描述方式,但是希望上面的例子有意义。

谢谢!

php arrays multidimensional-array
4个回答
1
投票
<?
foreach($arr as $index=>$subArr){
  if($subArr['SubID']){
    $arr[$subArr['SubID']-1]['SubSections'][] = $subArr;
    unset($arr[$index]);
  }
}
?>

我认为这可以完成工作。也许会暗示一些精简的修改


2
投票

我几乎没有裁剪您的示例了:),在数组[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。在实现示例后意识到这一点。


2
投票

因此,我的解决方案可能不是最漂亮的,但它基于一个假设,即某个类别可能出现在数组中的某个子项之后,因此我们先找出类别...然后执行另一个循环以填充子类别。


1
投票

使用此

© www.soinside.com 2019 - 2024. All rights reserved.