Как объединить повторяющиеся элементы этого массива в PHP?

У меня есть такой массив:

$array = array(
0 => array("ordernumber" => "1", "name" => "John", "product" => "laptop", "component" => "memory"),
1 => array("ordernumber" => "1", "name" => "John", "product" => "laptop", "component" => "cpu"),
2 => array("ordernumber" => "1", "name" => "John", "product" => "desktop", "component" => "cpu"),
3 => array("ordernumber" => "2", "name" => "Pete", "product" => "monitor", "component" => "")
);

Он содержит данные из разных заказов, но, как вы можете видеть, заказ может содержать несколько купленных продуктов, и каждый продукт может содержать разные «компоненты». В этом массиве много повторяющихся данных, поэтому я хотел бы превратить их в это:

$array = array(
0 => array(
"order" => array(
"ordernumber" => "1", "name" => "John"),
"products" => array(
0 => array(
"name" => "laptop",
"components" => array("memory", "cpu")
),
1 => array(
"name" => "desktop",
"components" => array("cpu")
)
)
),
1 => array(
"order" => array(
"ordernumber" => "2", "name" => "Pete"),
"products" => array(
0 => array(
"name" => "monitor",
"components" => array()
)
)
)
);

Что было бы хорошим способом сделать это?

0

Решение

Пожалуйста, используйте код ниже, чтобы сделать решение, что вы хотите

<?php

$array = array(
0 => array("ordernumber" => "1", "name" => "John", "product" => "laptop", "component" => "memory"),
1 => array("ordernumber" => "1", "name" => "John", "product" => "laptop", "component" => "cpu"),
2 => array("ordernumber" => "1", "name" => "John", "product" => "desktop", "component" => "cpu"),
3 => array("ordernumber" => "2", "name" => "Pete", "product" => "monitor", "component" => "")
);$final_array = [];
foreach($array as $k=>$v){
$final_array[$v['ordernumber']]['order']['ordernumber'] = $v['ordernumber'];
$final_array[$v['ordernumber']]['order']['name'] = $v['name'];

$final_array[$v['ordernumber']]['products'][$v['product']]['name'] = $v['product'];
$final_array[$v['ordernumber']]['products'][$v['product']]['components'][] = $v['component'];
}

// You can skip this foreach if there will not metter of KEY of an array in your code!
$final_array = array_values($final_array);
foreach($final_array as $k=>$v){
$final_array[$k]['products'] = array_values($final_array[$k]['products']);
}echo "<pre>";
print_r($final_array);

?>

его должно работать !!

1

Другие решения

Других решений пока нет …