【发布时间】:2020-05-12 18:00:54
【问题描述】:
我有一个具有某些结构的数组,必须递归地转换为新结构。请考虑以下示例:
<?php
class Foo {
public function getData()
{
return [
'a' => [
'fooa1' => 'bara1',
'fooa2' => 'bara2',
'fooa3' => 'bara3',
'parent' => '0'
],
'b' => [
'foob1' => 'barb1',
'foob2' => 'barb2',
'foob3' => 'barb3',
'parent' => '0'
],
'c' => [
'fooc1' => 'barc1',
'fooc2' => 'barc2',
'fooc3' => 'barc3',
'parent' => 'b'
],
'd' => [
'food1' => 'bard1',
'food2' => 'bard2',
'food3' => 'bard3',
'parent' => 'a'
],
'e' => [
'fooe1' => 'bare1',
'fooe2' => 'bare2',
'fooe3' => 'bare3',
'parent' => 'c'
],
];
}
public function getDataPattern()
{
return [
'a' => [
'fooa1' => 'bara1',
'fooa2' => 'bara2',
'fooa3' => 'bara3',
'children' => [
'd' => [
'food1' => 'bard1',
'food2' => 'bard2',
'food3' => 'bard3',
'parent' => 'a'
],
]
],
'b' => [
'foob1' => 'barb1',
'foob2' => 'barb2',
'foob3' => 'barb3',
'children' => [
'c' => [
'fooc1' => 'barc1',
'fooc2' => 'barc2',
'fooc3' => 'barc3',
'parent' => 'b',
'children' => [
'e' => [
'fooe1' => 'bare1',
'fooe2' => 'bare2',
'fooe3' => 'bare3',
'parent' => 'c'
],
]
],
]
],
];
}
// DOESN'T WORK YET :(
public function transformArrayToPattern()
{
$recordsArray = $this->getData();
foreach ($recordsArray as $key => $recordArray) {
if ($recordArray['parent'] !== '0') {
$recordsArray[$key]['children'] = $recordArray;
$this->transformArrayToPattern($recordArray);
}
}
return $recordsArray;
}
}
级别和嵌套可以变化,但基本上它是输入上的平面结构,我最终需要这样的嵌套结构。
你有什么想法,怎么做?谢谢!
编辑:对不起!我需要更正这个例子,因为显然我们只使用数字 ID 而不是字符串。正确的格式是这样的:
public function getData()
{
return [
1 => [
'fooa1' => 'bara1',
'fooa2' => 'bara2',
'fooa3' => 'bara3',
'parent' => 0
],
2 => [
'food1' => 'bard1',
'food2' => 'bard2',
'food3' => 'bard3',
'parent' => 1
],
3 => [
'fooc1' => 'barc1',
'fooc2' => 'barc2',
'fooc3' => 'barc3',
'parent' => 1
],
];
}
...但是到目前为止,这两种解决方案都无法解决。您介意调整数字键的脚本吗?非常感谢!
【问题讨论】:
-
有必要用你的方法吗?还是可以手动完成?
-
getData()和getDataPattern()方法只是为了举例。主要的转换逻辑是最重要的部分,应该发生在函数transformArrayToPattern()中。 -
并不是说这会解决所有问题,您在
if ($recordArray['parent'] !== 0)有一个错误,... 0 上缺少引号。
标签: php arrays recursion multidimensional-array