【问题标题】:Convert PHP Array from One to Multi-dimensional Based on Parent ID Values根据父 ID 值将 PHP 数组从一维转换为多维
【发布时间】:2018-10-06 02:57:53
【问题描述】:

我有一个代表多维数据的一维对象数组:

array(
    array(
        "id" => 1,
        "parent_id" => 0,
        "content" => 'des'
    ),
    array(
        "id" => 2,
        "parent_id" => 3,
        "content" => 'abc'
    ),
    array(
        "id" => 3,
        "parent_id" => 1,
        "content" => 'jjjj'
    ),
    array(
        "id" => 4,
        "parent_id" => 5,
        "content" => 'dsfsd'
    ),
    array(
        "id" => 5,
        "parent_id" => 0,
        "content" => 'dsfsd'
    )
);

如何将其转为多维数组?

array(
    array(
        "id" => 1,
        "parent_id" => 0,
        "content" => 'des'
    ),
    array(
        "id" => 3,
        "parent_id" => 1,
        "content" => 'jjjj'
    ),
    array(
        "id" => 2,
        "parent_id" => 3,
        "content" => 'abc'
    ),
    array(
        "id" => 5,
        "parent_id" => 0,
        "content" => 'dsfsd'
    ),
    array(
        "id" => 4,
        "parent_id" => 5,
        "content" => 'dsfsd'
    )
);

我想在父元素之后按 id 和子元素排序,如果 parent_id = 0 它是根元素。非常感谢大家!

【问题讨论】:

  • 您放置的第一个数组具有“parent_id”顺序` 0 3 1 5 0 . The second array's "parent_id" order is 0 1 3 0 5 . Should it not be 0 0 1 3 5 `?这背后的登录是什么?而且您的两个数组都是多维的,因此标题没有意义。解释得更好。
  • 我想在父元素之后按 id 和子元素排序,如果 parent_id = 0 它是根元素

标签: php arrays laravel


【解决方案1】:

我认为您需要按parent_id 对数组进行排序。

array_sort() 一个 laravel 辅助函数:https://laravel.com/docs/5.7/helpers#method-array-sort

$sorted = array_sort($array, 'parent_id');

输出

array:5 [▼
  0 => array:3 [▼
    "id" => 1
    "parent_id" => 0
    "content" => "des"
  ]
  4 => array:3 [▼
    "id" => 5
    "parent_id" => 0
    "content" => "dsfsd"
  ]
  2 => array:3 [▼
    "id" => 3
    "parent_id" => 1
    "content" => "jjjj"
  ]
  1 => array:3 [▼
    "id" => 2
    "parent_id" => 3
    "content" => "abc"
  ]
  3 => array:3 [▼
    "id" => 4
    "parent_id" => 5
    "content" => "dsfsd"
  ]
]

【讨论】:

    【解决方案2】:

    这是我的代码(完成)

    function sort($array){
        $newArray = [];
        sortLoop($array, $newArray);
        return $newArray;
    }
    function sortLoop($array, &$newArray, $parent_id = 0){
        foreach ($array as $key => $item) {
            if ($item['parent_id'] == $parent_id) {
                $newArray[] = $item;
                unset($array[$key]);
                sortLoop($array,$newArray, $item['id']);
            }
        }
    }
    

    希望这对某人有用。

    【讨论】:

      猜你喜欢
      • 2011-12-07
      • 1970-01-01
      • 2019-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 2019-06-29
      相关资源
      最近更新 更多