【发布时间】:2023-03-23 06:31:01
【问题描述】:
我正在尝试创建从 API 获得的结果的扁平数组。结果数组如下所示:
$arrayIhave = array(
'element name single' => array(
'__sort_name' => 'Name for sorting',
'id' => '1',
),
'element name single2' => array(
'__sort_name' => 'Name for sorting',
'id' => '2',
),
'element name with nested' => array(
'__sort_name' => 'Name for sorting',
'sub folder name' -> array(
'__sort_name' => 'Name for sorting',
'id' => '3',
),
'another sub folder' => array(
'__sort_name' => 'Name for sorting',
'id' => '4',
)
),
'element name with multi nested' => array(
'__sort_name' => 'Name for sorting',
'sub folder name' -> array(
'__sort_name' => 'Name for sorting',
'sub sub folder name' -> array(
'__sort_name' => 'Name for sorting',
'id' => '5',
),
),
),
'another sub folder' => array(
'__sort_name' => 'Name for sorting',
'id' => '6',
)
),
);
我试图安排的最后一个数组有一个每个元素的 id,它在树中给出了依赖项。所以顶级项目对它的所有子文件夹都有id 依赖项,无论下降多少级。
树中的最后一个子文件夹仅对其子文件夹具有依赖关系。依赖树不会使用 id,因为 folders 没有。
结果数组:
$arrayITryToHave = array(
'element name single' => array(),
'element name single2' => array(),
'element name with nested' => array(
'sub folder name',
),
'element name with multi nested' => array(
'sub folder name',
'sub sub folder name', // Note the dependency array is flat and has all levels flatten
'another sub folder',
),
'sub folder name' => array( // Even though a subfolder, it has dependencies too
'sub sub folder name',
),
);
我尝试使用 array_walk_recursive 和 foreach 和 array_column 但这在多层次上不起作用。我也尝试使用常规的 foreach 和 &$reference 数组,但是我无法将 sub sub folder 添加到上一级的依赖项和上一级的依赖项中。
目前使用的代码:
function generateArray(&$array, $iterate){
foreach($iterate as $key => $value){
$id = $key;
// Remove invalid elements
if(isset($value['__sort_name'])) unset($value['__sort_name']);
// If not present already, make an array
if(!isset($array[$id])){
$array[$id] = array();
}
array_push($array[$id], array_column($value, 'name', 'name'));
}
}
你会如何解决这个问题?
【问题讨论】:
-
欢迎来到 StackOverflow!为了增加您的问题得到回答的机会,我建议您包含您在解决方案尝试中使用的代码。
-
感谢您的建议@Das_Geek,就这么做了!
-
在您的输出中,为什么
element name with nested没有`另一个子文件夹`?此外,您的$arrayIhave语法不正确。
标签: php arrays algorithm flatten