Erm*_*gić 2 php arrays nested multidimensional-array
函数/函数需要执行以下操作:
- 接受嵌套数组树
- 在我的情况下指定要展平的女巫子数组我有 ['children'] 与父项展平
当前树:
Array
(
[0] => stdClass Object
(
[id] => 1
[comment_threads_id] => 1
[users_id] => 1
[parent_id] => 0
[message] => Lorem ipsum
[created_at] => 2018-01-03 04:21:49
[children] => Array
(
[0] => stdClass Object
(
[id] => 2
[comment_threads_id] => 1
[users_id] => 2
[parent_id] => 1
[message] => Lorem ipsum
[created_at] => 2018-01-03 04:21:49
[children] => Array
(
)
)
[1] => stdClass Object
(
[id] => 247
[comment_threads_id] => 1
[users_id] => 2
[parent_id] => 1
[message] =>
[created_at] => 2018-01-03 04:30:07
[children] => Array
(
)
)
)
)
[1] => stdClass Object
(
[id] => 3
[comment_threads_id] => 1
[users_id] => 1
[parent_id] => 0
[message] => Lorem ipsum
[created_at] => 2018-01-03 04:21:49
[children] => Array
(
[0] => stdClass Object
(
[id] => 4
[comment_threads_id] => 1
[users_id] => 2
[parent_id] => 3
[message] => Lorem ipsum
[created_at] => 2018-01-03 04:21:49
[children] => Array
(
[0] => stdClass Object
(
[id] => 250
[comment_threads_id] => 1
[users_id] => 2
[parent_id] => 4
[message] =>
[created_at] => 2018-01-03 05:03:09
[children] => Array
(
)
)
[1] => stdClass Object
(
[id] => 251
[comment_threads_id] => 1
[users_id] => 2
[parent_id] => 4
[message] =>
[created_at] => 2018-01-03 05:25:58
[children] => Array
(
[0] => stdClass Object
(
[id] => 252
[comment_threads_id] => 1
[users_id] => 2
[parent_id] => 251
[message] =>
[created_at] => 2018-01-03 05:05:09
[children] => Array
(
)
)
)
)
)
)
[1] => stdClass Object
(
[id] => 248
[comment_threads_id] => 1
[users_id] => 2
[parent_id] => 3
[message] =>
[created_at] => 2018-01-03 05:02:05
[children] => Array
(
)
)
)
)
[2] => stdClass Object
(
[id] => 5
[comment_threads_id] => 1
[users_id] => 2
[parent_id] => 0
[message] => Lorem ipsum
[created_at] => 2018-01-03 04:21:49
[children] => Array
(
[0] => stdClass Object
(
[id] => 6
[comment_threads_id] => 1
[users_id] => 2
[parent_id] => 5
[message] => Lorem ipsum
[created_at] => 2018-01-03 04:21:49
[children] => Array
(
[0] => stdClass Object
(
[id] => 7
[comment_threads_id] => 1
[users_id] => 2
[parent_id] => 6
[message] => Lorem ipsum
[created_at] => 2018-01-03 04:21:49
[children] => Array
(
[0] => stdClass Object
(
[id] => 8
[comment_threads_id] => 1
[users_id] => 2
[parent_id] => 7
[message] => Lorem ipsum
[created_at] => 2018-01-03 04:21:49
[children] => Array
(
[0] => stdClass Object
(
[id] => 9
[comment_threads_id] => 1
[users_id] => 1
[parent_id] => 8
[message] => Lorem ipsum
[created_at] => 2018-01-03 04:21:49
[children] => Array
(
[0] => stdClass Object
(
[id] => 10
[comment_threads_id] => 1
[users_id] => 2
[parent_id] => 9
[message] => Lorem ipsum
[created_at] => 2018-01-03 04:21:49
[children] => Array
(
[0] => stdClass Object
(
[id] => 11
[comment_threads_id] => 1
[users_id] => 2
[parent_id] => 10
[message] => Lorem ipsum
[created_at] => 2018-01-03 04:21:49
[children] => Array
(
[0] => stdClass Object
(
[id] => 12
[comment_threads_id] => 1
[users_id] => 2
[parent_id] => 11
[message] => Lorem ipsum
[created_at] => 2018-01-03 04:21:49
[children] => Array
(
[0] => stdClass Object
(
[id] => 13
[comment_threads_id] => 1
[users_id] => 2
[parent_id] => 12
[message] => Lorem ipsum
[created_at] => 2018-01-03 04:21:49
[children] => Array
(
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
Run Code Online (Sandbox Code Playgroud)
它应该是什么样子:
Array
(
[0] => stdClass Object
(
[id] => 1
[comment_threads_id] => 1
[users_id] => 1
[parent_id] => 0
[message] => Lorem ipsum
[created_at] => 2018-01-03 04:21:49
[children] => Array
(
)
)
[1] => stdClass Object
(
[id] => 2
[comment_threads_id] => 1
[users_id] => 2
[parent_id] => 1
[message] => Lorem ipsum
[created_at] => 2018-01-03 04:21:49
[children] => Array
(
)
)
[2] => stdClass Object
(
[id] => 247
[comment_threads_id] => 1
[users_id] => 2
[parent_id] => 1
[message] =>
[created_at] => 2018-01-03 04:30:07
[children] => Array
(
)
)
[3] => stdClass Object
(
[id] => 3
[comment_threads_id] => 1
[users_id] => 1
[parent_id] => 0
[message] => Lorem ipsum
[created_at] => 2018-01-03 04:21:49
[children] => Array
(
)
)
[4] => stdClass Object
(
[id] => 4
[comment_threads_id] => 1
[users_id] => 2
[parent_id] => 3
[message] => Lorem ipsum
[created_at] => 2018-01-03 04:21:49
[children] => Array
(
)
)
[5] => stdClass Object
(
[id] => 250
[comment_threads_id] => 1
[users_id] => 2
[parent_id] => 4
[message] =>
[created_at] => 2018-01-03 05:03:09
[children] => Array
(
)
)
[6] => stdClass Object
(
[id] => 251
[comment_threads_id] => 1
[users_id] => 2
[parent_id] => 4
[message] =>
[created_at] => 2018-01-03 05:25:58
[children] => Array
(
)
)
[7] => stdClass Object
(
[id] => 252
[comment_threads_id] => 1
[users_id] => 2
[parent_id] => 251
[message] =>
[created_at] => 2018-01-03 05:05:09
[children] => Array
(
)
)
[8] => stdClass Object
(
[id] => 248
[comment_threads_id] => 1
[users_id] => 2
[parent_id] => 3
[message] =>
[created_at] => 2018-01-03 05:02:05
[children] => Array
(
)
)
[9] => stdClass Object
(
[id] => 5
[comment_threads_id] => 1
[users_id] => 2
[parent_id] => 0
[message] => Lorem ipsum
[created_at] => 2018-01-03 04:21:49
[children] => Array
(
)
)
[10] => stdClass Object
(
[id] => 6
[comment_threads_id] => 1
[users_id] => 2
[parent_id] => 5
[message] => Lorem ipsum
[created_at] => 2018-01-03 04:21:49
[children] => Array
(
)
)
[11] => stdClass Object
(
[id] => 7
[comment_threads_id] => 1
[users_id] => 2
[parent_id] => 6
[message] => Lorem ipsum
[created_at] => 2018-01-03 04:21:49
[children] => Array
(
)
)
[12] => stdClass Object
(
[id] => 8
[comment_threads_id] => 1
[users_id] => 2
[parent_id] => 7
[message] => Lorem ipsum
[created_at] => 2018-01-03 04:21:49
[children] => Array
(
)
)
[13] => stdClass Object
(
[id] => 9
[comment_threads_id] => 1
[users_id] => 1
[parent_id] => 8
[message] => Lorem ipsum
[created_at] => 2018-01-03 04:21:49
[children] => Array
(
)
)
[14] => stdClass Object
(
[id] => 10
[comment_threads_id] => 1
[users_id] => 2
[parent_id] => 9
[message] => Lorem ipsum
[created_at] => 2018-01-03 04:21:49
[children] => Array
(
)
)
[15] => stdClass Object
(
[id] => 11
[comment_threads_id] => 1
[users_id] => 2
[parent_id] => 10
[message] => Lorem ipsum
[created_at] => 2018-01-03 04:21:49
[children] => Array
(
)
)
[16] => stdClass Object
(
[id] => 12
[comment_threads_id] => 1
[users_id] => 2
[parent_id] => 11
[message] => Lorem ipsum
[created_at] => 2018-01-03 04:21:49
[children] => Array
(
)
)
[17] => stdClass Object
(
[id] => 13
[comment_threads_id] => 1
[users_id] => 2
[parent_id] => 12
[message] => Lorem ipsum
[created_at] => 2018-01-03 04:21:49
[children] => Array
(
)
)
)
Run Code Online (Sandbox Code Playgroud)
因此,对于每个父对象,我需要提取它的子数组(如果它不为空),对于每个子对象(如果它不为空),我需要提取它的数组等等。
在最终数组中提取时需要保持相同的 ID 顺序(这是目标)。
我已经尝试了一些类似的方法,使用一些 PHP SPL 迭代器函数来展平数组,但没有它们,但我无法获得正确的顺序,在最后的数组中缺少对象,到目前为止,我也希望获得最佳性能如果需要处理 10.000 或更多嵌套行,则可能会出现这种情况。
像这样展平对象数组的递归函数基本上需要做两件事。
这是一个以这种方式工作的示例。
function flatten($input, $key) {
$output = [];
// For each object in the array
foreach ($input as $object) {
// separate its children
$children = isset($object->$key) ? $object->$key : [];
$object->$key = [];
// and add it to the output array
$output[] = $object;
// Recursively flatten the array of children
$children = flatten($children, $key);
// and add the result to the output array
foreach ($children as $child) {
$output[] = $child;
}
}
return $output;
}
Run Code Online (Sandbox Code Playgroud)
我不是 100% 确定你所说的“保持相同的 ID 顺序”是什么意思,但如果你的意思是我认为你所做的,这会做到这一点。