У меня есть следующий запрос.
SELECT day, price, source FROM prices WHERE item_id = 5
Стол выглядит так
date | price | source
1 | 1 | source_1
2 | 2 | source_2
3 | 9 | source_1
3 | 7 | source_2
3 | 3 | source_3
Обратите внимание, что не каждый источник имеет данные для каждой «даты». Некоторые даты имеют несколько источников. Это для графика сравнения цен на основе PHPlot.
Массив для PHPlot должен быть таким.
$data = array(
array('1', 1, 4, 2),
array('2', 5, 7, 1),
array('3', 7, '', 6),
array('4', 8, 1, 4),
array('5', 2, 4, 6),
array('6', '', 4, 5),
array('7', 7, 2, 3));
Обратите внимание, что для некоторых источников отсутствуют некоторые данные. Это предназначено.
Так что мне нужно сделать (я думаю), чтобы каким-то образом сгруппировать данные.
Последняя глазурь на торте — это метки данных …
$labels = array('source_1', 'source_2', 'source_3');
Мне стыдно признаться, что это происходит над моей головой, но я стремлюсь учиться. У меня это отлично работает только с одним «источником».
хорошо .. чтобы сделать ваши массивы данных, попробуйте этот запрос:
SELECT `day`, `price`, `source` FROM prices WHERE `item_id` = 5 ORDER BY `day`, `source`
Затем извлеките ассоциативный массив из этого результата и передайте его этой функции:
function makeArray($rows) {
$rowCount = 0;
$finalArray = array();
$legendArray = array();
foreach($rows as $row) {
$thisDate = (int)$row['day'];
if ($thisDate > $rowCount) {
$rowCount++;
$finalArray[$rowCount-1] = array($thisDate, '', '', '');
}
if (!in_array($row['source'], $legendArray)) {
$legendArray[] = $row['source'];
}
$thisIndex = 1;
switch($row['source']) {
case 'source_1':
$thisIndex = 1;
break;
case 'source_2':
$thisIndex = 2;
break;
case 'source_3':
$thisIndex = 3;
break;
}
$finalArray[$rowCount-1][$thisIndex] = $row['price'];
}
return array($legendArray, $finalArray);
}
Используя данные вашего примера, вот вывод, когда print_r()
Используя возвращенный массив:
Array
(
[0] => Array
(
Array
(
[0] => Array
(
[0] => 1
[1] => 1
[2] =>
[3] =>
)
[1] => Array
(
[0] => 2
[1] =>
[2] => 2
[3] =>
)
[2] => Array
(
[0] => 3
[1] => 9
[2] => 7
[3] => 3
)
)
)
[1] => Array
(
[0] => 'source_1'
[1] => 'source_2'
[2] => 'source_3'
)
)
Других решений пока нет …