PHP - постепенно увеличивать значение массива

0

В основном у меня есть это из запроса:

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) одинаковый, валей перезаписывается. Как мне добавить массив вместо перезаписи?

  • 1
    Вы, вероятно, можете заставить сервер SQL делать все это за вас, не прибегая к манипулированию всеми данными в PHP. Посмотрите агрегатные функции.
Теги:
arrays
multidimensional-array

2 ответа

1
Лучший ответ
foreach($rows as $row){
    $data[$row['type']][$row['period']] = $row['val']);
}
  • 0
    Я невероятно глуп на этом ....... Спасибо!
0

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

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню