2015-03-05 3 views
0

В принципе у меня есть это из запроса:PHP - Поэтапно добавить значение массива

Array 
(
[0] => Array 
    (
     [period] => 2014-03 
     [val] => 2.19 
     [type] => TypeX 
    ), 
[1] => Array 
    (
     [period] => 2014-03 
     [val] => 2.02 
     [type] => TypeY 
    ) 
) 

Использование цикла Еогеасп для заполнения другого массива мы будем называть DATA, я хочу, чтобы получить следующее:

Array 
(
[TypeX] => Array 
    (
     [2014-03] => 2.19 
    ) 
[TypeY] => Array 
    (
     [2014-03] => 2.02 
    ) 
) 

Все это зациклировано, потому что мой запрос должен запускаться каждый раз в течение другого периода. Текущий пример, второй цикл будет работать для 2014-04. Моя проблема в том, когда я приезжаю на 2-й раз в моем массиве данных, я хочу это:

Array 
(
[TypeX] => Array 
    (
     [2014-03] => 2.19 
     [2014-04] => 1.10 

    ) 
[TypeY] => Array 
    (
     [2014-03] => 2.02 
     [2014-04] => 4.74 
    ) 
) 

Мой код примерно так:

$data = array(); 
foreach($graph_period as $period){ 
$rows = Queryfunction($period,$WHERE,$byType); 
     foreach($rows as $row){ 
      $data[$row['type']] = array($row['period']=>$row['val']); 
     } 
} 

Поскольку ключ первого уровня (TypeX, TypeY) совпадают, valei перезаписывается. Как мне добавить массив вместо перезаписи?

+1

Возможно, вы можете заставить SQL-сервер сделать все это для вас, не прибегая к манипулированию всеми данными на PHP. Посмотрите на агрегатные функции. – GordonM

ответ

1
foreach($rows as $row){ 
    $data[$row['type']][$row['period']] = $row['val']); 
} 
+0

Я невероятно глуп на этом ....... Спасибо! – Clement

0

Вам нужно только немного изменить бит. Внутри foreach, где вы установили значение:

if(!isset($date[$row['type']])) { 
    $data[$row['type']] = array(); 
} 

$data[$row['type']][$row['period']] = $row['val']; 

Итак, вы создаете массив только в том случае, если он не существует.

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