Сгрупировать массив и очистить от null. PHP
Всем привет, Есть вот такой массив:
array:10 [▼
0 => array:3 [▼
"name" => null
"group" => null
"alias" => null
]
1 => array:3 [▼
"name" => "Река"
"group" => "Природа"
"alias" => "river"
]
2 => array:3 [▼
"name" => null
"group" => null
"alias" => null
]
3 => array:3 [▼
"name" => null
"group" => null
"alias" => null
]
4 => array:3 [▼
"name" => null
"group" => null
"alias" => null
]
5 => array:3 [▼
"name" => "Тигр"
"group" => "Животные"
"alias" => "tiger"
]
6 => array:3 [▼
"name" => null
"group" => null
"alias" => null
]
7 => array:3 [▼
"name" => "Медведи"
"group" => "Животные"
"alias" => "bears"
]
8 => array:3 [▼
"name" => "Медведи"
"group" => "Животные"
"alias" => "bears"
]
9 => array:3 [▼
"name" => null
"group" => null
"alias" => null
]
]
Как мне из такого массива получить вот такой?
5 => array:1 [▼
"groups" => "Животные"
1 => array:2 [▼
1 => array:2 [▼
"name" => "Тигр"
"alias" => "tiger"
]
2 => array:2 [▼
"name" => "Медведи"
"alias" => "bears"
]
"groups" => "Природа"
1 => array:1 [▼
1 => array:2 [▼
"name" => "Река"
"alias" => "river"
]
]
Для того что бы потом в шаблоне выводить данные в таком виде:
Животные:
1) Тигр
2) Медведи
Природа:
1) Река
Ответы (2 шт):
Автор решения: Bloom
→ Ссылка
<?php
$arrd=array(
"0" => array(
"name" => null,
"group" => null,
"alias" => null
),
"1" => array(
"name" => "Река",
"group" => "Природа",
"alias" => "river"
),
"2" => array(
"name" => null,
"group" => null,
"alias" => null
),
"3" => array(
"name" => null,
"group" => null,
"alias" => null
),
"4" => array(
"name" => null,
"group" => null,
"alias" => null
),
"5" => array(
"name" => "Тигр",
"group" => "Животные",
"alias" => "tiger"
),
"6" => array(
"name" => null,
"group" => null,
"alias" => null
),
"7" => array(
"name" => "Медведи",
"group" => "Животные",
"alias" => "bears"
),
"8" => array(
"name" => "Медведи",
"group" => "Животные",
"alias" => "bears"
),
"9" => array(
"name" => null,
"group" => null,
"alias" => null
)
);
foreach ($arrd as $key => $value) {
# code..
if(!$value["group"]==null or !$value["group"]==''){
# code...
if ($value["group"]=="Животные") {
$gr1[]=array("name" => $value["name"], "alias"=>$value["alias"]);
$grs["Животные"]=array_unique($gr1, SORT_REGULAR);
}elseif($value["group"]=="Природа"){
# code...
$gr2[]=array("name" => $value["name"], "alias"=>$value["alias"]);
$grp["Природа"]=array_unique($gr2, SORT_REGULAR);
}
}
}
$gr=array_merge($grs, $grp);
print_r($gr);
?>
Автор решения: InDevX
→ Ссылка
$groups = [];
foreach ($data as $key => $item) {
if ( !empty($item['name']) ) {
$groups['groups'][$item['group']][] = [
'name' => $item['name'],
'alias' => $item['alias']
];
$groups['groups'][$item['group']] = array_unique($groups['groups'][$item['group']], SORT_REGULAR);
}
}
var_dump($groups);
Собираются уникальные группы с массива, и в дальнейшем простой вывод
foreach ($groups['groups'] as $gName => $gItems) {
echo $gName . ': ' . implode(', ', array_column($gItems, 'name')) . PHP_EOL;
}