将SQL结果中的行转换为数组中的列

时间:2017-09-14 13:56:54

标签: php arrays transform rows

我想从一个看起来像这个

的SQL中获取结果
id    name    kg     date
1     ABC     3      2017-09-14
1     ABC     2      2017-09-15
2     DEF     2      2017-09-14
2     DEF     5      2017-09-15
2     DEF     5      2017-09-16
2     DEF     3      2017-09-17
3     GHI     3      2017-09-15
3     GHI     6      2017-09-17

并把它放入一个数组(或其他我可以循环的东西),所以它看起来像这样

id    name    2017-09-10    2017-09-11    2017-09-12    2017-09-13    2017-09-14    2017-09-15    2017-09-16    2017-09-17
1     ABC     3 kg          2 kg          
2     DEF     2 kg          5 kg          5 kg          3 kg
3     GHI                   3 kg                        6 kg

它只会保留从上一个星期日到星期日(活动周)的日期。

我之前没有使用过数组,但到目前为止我所读到的内容我认为我必须在另一个数组中创建一个数组才能实现这个目标?我想从SQL结果我将遍历每一行并将值推入右行,具体取决于id是否已存在。一个id只能有唯一的日期。

while ($row = odbc_fetch_row($resultSQL)){
    Create an array with the columns above and push the result from the SQl
    into the array on a new row or an existing column if the ID is
    already in the array.
}

任何人都有任何想法如何实现这一目标?感谢。

编辑:

解决方案:我现在已经完成了这样的工作,取得了我想要的结果。

//create two arrays
$items=array();
$dates=array();

//loop through the SQL result and put it into the arrays
while ($row = odbc_fetch_row($resultSQL)){
$ITEMNO=odbc_result($resultSQL,"id");
$ITEMNAME=odbc_result($resultSQL,"name");
$RecQtyDay=odbc_result($resultSQL,"kg");

$items[$ITEMNO] = $ITEMNAME;
$dates[$REGDATE][$ITEMNO] = $RecQtyDay;
}

//sort the dates array
ksort($dates);

//loop through and print out dates array within the item array
foreach ($items as $ITEMNO => $ITEMNAME) {
echo "$ITEMNO $ITEMNAME ";
foreach ($dates as $REGDATE => $values) {
    if (isset($values[$ITEMNO])) echo "$REGDATE $values[$ITEMNO]";
}
echo"<BR>";
}

1 个答案:

答案 0 :(得分:2)

在您获取查询结果时,构建两个数组,一个包含所有项目,另一个按日期分组,其中包含每个日期记录的任何项目的值。

while ($row = odbc_fetch_row($resultSQL)) {
    $items[$row['id']] = $row['name'];
    $dates[$row['date']][$row['id']] = $row['kg'];
}

按键(日期)

对日期/值数组进行排序
ksort($dates);

然后循环遍历项目数组以生成行。在每一行中,循环遍历日期数组并输出该id和日期的值。

foreach ($items as $id => $name) {
    echo "$id   $name";
    foreach ($dates as $date => $values) {
        if (isset($values[$id])) echo "$value kg";
    }
}

此输出的格式不会很整齐,但我不知道你打算如何输出这个,所以我会把它留给你。