2016-10-06 2 views
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" => "") 
); 

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

$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

использовать цикл foreach и соответствующим образом изменять данные. Что вы пробовали? – jitendrapurohit

+0

Я плохо разбираюсь в массивах, поэтому у меня возникли проблемы даже с представлением о том, как должен выглядеть цикл (или составление нового массива). Благодаря приведенному ниже решению я имею более четкое представление о том, как решать подобные проблемы в будущем. – Marc

ответ

1

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

<?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); 

?> 

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

+0

Спасибо, он отлично работает! – Marc

+0

Ваш прием :) –

Смежные вопросы