UPDATEvar_export
версия массива HEREГруппировка многомерных массивов в PHP с помощью поля
У меня есть следующий массив, который я хотел бы сгруппировать элементы/детей по их стоимости Унилевел:
array(
0 => array(
"member_id" => 3,
"unilevel" => 1,
"children" => array(
0 => array(
"member_id" => 4,
"unilevel" => 2,
"children" => array(
0 => array(
"member_id" => 6,
"unilevel" => 3,
"children" => array(
0 => array(
"member_id" => 7,
"unilevel" => 4)))))
1 => array(
"member_id" => 9
"unilevel" => 2)))
1 => array(
"member_id" => 5,
"unilevel" => 1,
"children" => array(
0 => array(
"member_id" => 8,
"unilevel" => 2,
"children" => array(
0 => array(
"member_id" => 10,
"unilevel" => 3))))))
Контроллер ниже имеет функцию с именем: groupPerlevel
, которая выполняет группировку, но теперь она группирует только первого родителя прямо сейчас, это уже рекурсивная функция, я не уверен, почему она не помещает элементы второго родителя в группы unilevel.
class TestController extends Controller {
private $group = array();
private function setGroup($value) {
$this->group = $this->group + $value;
}
private function getGroup() {
return $this->group;
}
public function create()
{
$this->groupPerlevel($tree);
dd($this->getGroup());
}
private function groupPerlevel(array $items)
{
var_dump($items);
$grouparr = $this->getGroup();
$newkey = 0;
$templevel = 1;
foreach($items as $key => $val) {
if($templevel == $val->unilevel) {
$grouparr[$templevel][$newkey] = $val;
$this->setGroup($grouparr);
} else {
if(isset($grouparr[$val->unilevel][$newkey])) {
$count = count($grouparr[$val->unilevel]);
$grouparr[$val->unilevel][$count] = $val;
$this->setGroup($grouparr);
} else {
$grouparr[$val->unilevel][$newkey] = $val;
}
}
if(isset($val->children)) {
$children = $val->children;
unset($val->children);
$this->groupPerlevel($children);
}
$newkey++;
}
$this->setGroup($grouparr);
}
}
Следующий массив будет моим желаемым выходом. массив (4) {[1] - это UNILEVEL (группа), поэтому все элементы/дети должны быть в их собственной группе униселевых классов, основываясь на их значении поля в униливе. Но он делает это только для первого родителя, второй родитель не группируется.
array(
1 => array(
0 => array(
"member_id" => 3,
"unilevel" => 1))
4 => array(
0 => array(
"member_id" => 7,
"unilevel" => 4))
3 => array(
0 => array (
"member_id" => 6,
"unilevel" => 3))
2 => array(
0 => array(
"member_id" => 4,
"unilevel" => 2
1 => array(
"member_id" => 9
"unilevel" => 2)))
Вы могли бы построить массив из него и опубликовать здесь ?, У меня проблема с созданием массива из вашего значения print_r –
@SugumarVenkatesan, который на самом деле тот же массив, только с двумя полями, я пропустил другие поля, поскольку он слишком длинный – shifter
Нет, на самом деле я хочу, если я его скопирую без любые изменения, которые он должен работать в моей системе. поэтому я могу легко попробовать результат, возможно ли это? –