В основном у меня есть это из запроса:
Array
(
[0] => Array
(
[period] => 2014-03
[val] => 2.19
[type] => TypeX
),
[1] => Array
(
[period] => 2014-03
[val] => 2.02
[type] => TypeY
)
)
Используя цикл foreach для заполнения другого массива, мы будем называть DATA, я хочу получить следующее:
Array
(
[TypeX] => Array
(
[2014-03] => 2.19
)
[TypeY] => Array
(
[2014-03] => 2.02
)
)
Все это зациклировано, потому что мой запрос должен запускаться каждый раз в течение другого периода. Текущий пример, второй цикл будет работать для 2014-04. Моя проблема в том, когда я прихожу во второй раз в свой массив DATA, я хочу это:
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) одинаковый, валей перезаписывается. Как мне добавить массив вместо перезаписи?
foreach($rows as $row){
$data[$row['type']][$row['period']] = $row['val']);
}
Вам нужно только немного изменить бит. Внутри foreach, где вы устанавливаете значение:
if( !isset($date[$row['type']]) ) {
$data[$row['type']] = array();
}
$data[$row['type']][$row['period']] = $row['val'];
Таким образом, вы создаете массив только в том случае, если он не существует.