2016-08-20 2 views
-4

Мне нужна помощь в группировании многомерного массива PHP. Массив, который у меня есть:Многомерный массив групп PHP

Array 
(
    [1385] => Array 
     (
      [product_id] => 1385 
      [product] => Tossed salad 
      [category_ids] => Array 
       (
        [0] => 489 
       ) 
     ) 
    [1386] => Array 
     (
      [product_id] => 1386 
      [product] => Green salad 
      [category_ids] => Array 
       (
        [0] => 489 
       ) 
     ) 
    [1387] => Array 
     (
      [product_id] => 1387 
      [product] => Milk Shake 
      [category_ids] => Array 
       (
        [0] => 440 
       ) 
     ) 
    [1388] => Array 
     (
      [product_id] => 1388 
      [product] => Mango Juice 
      [category_ids] => Array 
       (
        [0] => 440 
       ) 
     ) 
    [1389] => Array 
     (
      [product_id] => 1389 
      [product] => Orange Juice 
      [category_ids] => Array 
       (
        [0] => 440 
       ) 
     ) 
) 

Я хочу сгруппировать массив по-разному, чтобы я мог перечислить их категории. Что-то вроде этого:

Array 
    (
     [category_ids] => 489, 
     [products] => 
      [0] => Array 
      (
       [product_id] => 1385 
       [product] => Tossed salad 
      ) 
      [1] => Array 
      (
       [product_id] => 1386 
       [product] => Green salad 
      ) 

     [category_ids] => 440, 
     [products] => 
      [0] => Array 
      (
       [product_id] => 1387 
       [product] => Milk Shake 
      ) 
      [1] => Array 
      (
       [product_id] => 1388 
       [product] => Mango Juice 
      ) 
      [2] => Array 
      (
       [product_id] => 1389 
       [product] => Orange Juice 
      ) 
    ) 

Структура может быть неправильной, потому что я просто сделал это с помощью текстового редактора. Но да, я хочу что-то вроде этого. Перечислите эти товары под номером category_ids, иногда их может быть больше category_ids. Там также много других областей продуктов, я сокращаю, чтобы сделать его менее сложным. Есть product_price, company_id, а некоторые имеют многомерный массив, например product_options.

+1

так, что вы пробовали? – PaulH

+1

К сожалению, ваши требования невозможны в PHP, поскольку ключ массива PHP ** должен быть уникальным **. Таким образом, вы не можете иметь два ключа 'category_ids' в одном массиве. Однако вы могли бы использовать category_id как ключ, который был бы уникальным для каждой категории. – Sherif

+0

Я пытался сломать его и создать из него еще один массив. –

ответ

0

Привет использовать этот код, чтобы получить результат

$array = array(
    1385 => array(
      'product_id' => 1385, 
      'product' => 'Tossed salad', 
      'category_ids' => array(
        0 => 489 
       ) 
     ), 
    1386 => array(
      'product_id' => 1386, 
      'product' => 'Green salad', 
      'category_ids' => array(
        0 => 489 
       ) 
     ), 
    1387 => array(
      'product_id' => 1387, 
      'product' => 'Milk Shake', 
      'category_ids' => array(
        0 => 440 
       ) 
     ), 
    1388 => array(
      'product_id' => 1388, 
      'product' =>' Mango Juice', 
      'category_ids' => array(
        0 => 440 
       ) 
     ), 
    1389 => array(
      'product_id' => 1389, 
      'product' => 'Orange Juice', 
      'category_ids' => array(
        0 => 440 
       ) 
     ) 
); 

$catArray = array(); 

foreach ($array as $key => $value) { 
    foreach ($value['category_ids'] as $key2 => $value2) { 
     if(isset($catArray[$value2])) { 
      array_push($catArray[$value2]['products'], array('product_id' => $key, 
        'product_name' => $value['product'])); 
     } 
     else { 
      $catArray[$value2] = array(
       'cat_id' => $value2 
       ); 
      $catArray[$value2]['products'] = array(0 => 
       array(
        'product_id' => $key, 
        'product_name' => $value['product'] 
       ) 
      ); 
     } 
    } 
} 

echo '<pre/>'; 
print_r($catArray); 
Смежные вопросы