В то время как цикл внутри цикла foreach не переходит к циклу foreach

Я сохраняю даты из запроса в массив с помощью while loop и array_push.

$h = array();
$j = array();

while ($g = mysql_fetch_array($f)) {
   $date = new DateTime($g['selected_date']);
   echo "<th>" . date_format($date, 'd') . "</th>";
   array_push($h, $date);
   array_push($j, $g['selected_date']);
}

Печать этого массива возвращается к этому, что хорошо, я думаю.

Array (
   [0] => 2016-05-23
   [1] => 2016-05-24
   [2] => 2016-05-25
   [3] => 2016-05-26
   [4] => 2016-05-27
   [5] => 2016-05-28
)

Я пытаюсь использовать как это:

$a = mysql_query("select * from center") or die(mysql_error());
$arr = array();

foreach($j as $k) {
    while ($b = mysql_fetch_array($a)) {
        $l = "select sum(yid.center_inventory) as 'total' 
              from yl_inventory_details as yid
              left join yl_inventory as yi 
                  on yi.yl_inventory_no = yid.yl_inventory_no
              where yid.center_no = '$b[center_no]'
              and yi.date = '$k'";
        $c = mysql_query("$l") or die(mysql_error());
        $d = mysql_fetch_array($c);
        echo "<tr><td>".$b['center']."</td><td>".$d['total']."</td></tr>";              
    }
}

Но он принимает только первое значение, которое есть 2016-05-23. Цикл while не переходит к следующему значению foreach. Как это исправить?

1 ответ

  1. При использовании mysql_fetch_arrayон переходит на следующую строку в результате. Как только вы достигнете последнего результата, он начнет возвращаться FALSE.

    Чтобы ваш код работал, все, что вам нужно сделать, это поменять местами петли в другую сторону.

    Например.

    $a = mysql_query("select * from center") or die(mysql_error());
    $arr = array();
    while ($b = mysql_fetch_array($a))
    {
        foreach($j as $k)
        {
                $l = "select
                        sum(yid.center_inventory) as total 
                    from yl_inventory_details as yid
                    left join yl_inventory as yi on yi.yl_inventory_no = yid.yl_inventory_no
                    where yid.center_no = {$b['center_no']} and yi.date = {$k}";
                $c = mysql_query($l) or die(mysql_error());
                $d = mysql_fetch_array($c);
                echo
                "<tr>
                    <td>{$b['center']}</td>
                    <td>{$d['total']}</td>
                </tr>";             
        }
    }