2016-01-17 4 views
0

У меня есть следующий массив:Группировка массивов по ключу/значения

$array = array(
     array(
      'id' => '1', 
      'brand' => 'Nike', 
      'available' => '2016-01-16', 
      'price' => '25' 
     ), 
     array(
      'id' => '2', 
      'brand' => 'Nike', 
      'available' => '2016-01-16', 
      'price' => '20' 
     ), 
     array(
      'id' => '3', 
      'brand' => 'Puma', 
      'available' => '2016-01-16', 
      'price' => '20' 
     ), 
     array(
      'id' => '4', 
      'brand' => 'Adidas', 
      'available' => '2016-01-16', 
      'price' => '30' 
     ), 
     array(
      'id' => '5', 
      'brand' => 'Adidas', 
      'available' => '2016-01-15', 
      'price' => '32' 
     ), 
    ); 

Что я ищу, чтобы получить что-то вроде следующего:

array(
     'brand' => 'Nike', 
     'data' => array(
      array(
       '2016-01-16' => '25' 
      ), 
      array(
       '2016-01-16' => '20' 
      ) 
     ) 
    ), 
    array(
     'brand' => 'Puma', 
     'data' => array(
      array(
       '2016-01-16' => '20' 
      ) 
     ) 
    ), 
    array(
     'brand' => 'Adidas', 
     'data' => array(
      array(
       '2016-01-16' => '30' 
      ), 
      array(
       '2016-01-15' => '32' 
      ) 
     ) 
    ); 

Причем массив сгруппированы по марке и содержит available и price в качестве подмассивов.

В идеале я хотел бы быть в состоянии цикла, хотя массив и получить информацию, как следующее:

$data['brand']; // will store the brand (Nike, Puma etc) 
    $data['brand']['data'] 

Или что-то вроде этого, где я могу легко цикл тщательного и извлечения данных.

Спасибо

ответ

0

Следующий код делает работу:

$result = array(); 
foreach ($array as $record) { 
    if (!isset($result[$record['brand']])) { 
     $result[$record['brand']] = array(
      'brand' => $record['brand'], 
      'data' => array(array($record['available'] => $record['price'])), 
     ); 
    } 
    else { 
     $result[$record['brand']]['data'][] = array($record['available'] => $record['price']); 
    } 
} 
$result = array_values($result); 
+0

Это, кажется, работает почти ... Проблема заключается в том, что я Лик иметь 'data' элементы в массивах, как ' 'данные' => массив ( массив ( '2016-01-16' => '25' ), массив ( '2016-01-16' => '20' ) )' –

+0

Пропущенный что, обновил ответ. –

+0

Блестящий. большое спасибо –

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