我们有一个这样的数组:
Array
(
[0] => Array
(
[value] => aaa
[parent_id] => 5
)
[1] => Array
(
[value] => bbb
[parent_id] => 3
)
[2] => Array
(
[value] => ccc
[parent_id] => 3
)
)
正如您所看到的,2索引具有相同的[parent_id],我们需要将此数组转换为此
Array
(
[0] => Array
(
[parent_id] => 5
[sub] => Array(
[0] =>(
[value] => aaa
)
)
)
[1] => Array
(
[parent_id] => 3
[sub] => Array(
[0] =>(
[value] => bbb
)
[1] =>(
[value] => ccc
)
)
)
)
在php中我们使用了这个函数:
foreach ($Array as $item) {
$item['subs'] = array();
$indexedItems[$item['parent_id']] = (object) $item;
}
for($i=0; $i<count($Array); $i++){
if($Array[$i]['parent_id'] == $Array[$i-1]['parent_id']){
$indexedItems[$item['parent_id']]->subs[]=$Array[$i]['value'];
}
}
但是它没有用,你能帮我们做吗?
答案 0 :(得分:1)
如果您真的想要那个复杂的数组,那么您必须跟踪parent_id。 这是如何:
<?php
$foo = [
[
'value' => 'aaa',
'parent_id' => 900,
],
[
'value' => 'aaa',
'parent_id' => 813,
],
[
'value' => 'aaa',
'parent_id' => 900,
],
[
'value' => 'aaa',
'parent_id' => 813,
],
];
$indexed = [];
foreach($foo as $f) {
$index = getParentIndex($indexed, $f['parent_id']);
if ($index === null) {
$indexed[] = [
'parent_id' => $f['parent_id'],
'subs' => [
['value' => $f['value'] ],
],
];
}else{
$indexed[$index]['subs'][] = [ 'value' => $f['value'], ];
}
}
function getParentIndex($array, $parent_id) {
for($i=0;$i<count($array);$i++) {
if ($array[$i]['parent_id'] == $parent_id) return $i;
}
return null;
}
var_dump($indexed);
但是,这看起来非常复杂,可以使用imho。 我建议使用以下代码段:
$indexed = [];
foreach($foo as $f) {
if (!isset($indexed[$f['parent_id']])) $indexed[$f['parent_id']] = [];
$indexed[$f['parent_id']][] = $f['value'];
}
var_dump($indexed);
这将输出类似于:
的数组array (size=2)
900 =>
array (size=2)
0 => string 'aaa' (length=3)
1 => string 'aaa' (length=3)
813 =>
array (size=2)
0 => string 'aaa' (length=3)
1 => string 'aaa' (length=3)