Цикл PHP foreach неожиданно останавливается при анализе данных из SQL - PullRequest
0 голосов
/ 02 мая 2019

Я генерирую таблицу из данных MySQL, перебирая все ключи из каждой строки, чтобы сгенерировать заголовки таблицы.Этот цикл foreach (строка 6 ниже) останавливается после 25-го столбца в таблице, хотя var_dump ($ result) показывает, что запрос возвратил все 35 столбцов из таблицы.Решение, вероятно, приведет к появлению основных лицевых панелей, но я просто не могу разобраться с этим.

$result = mysqli_query($con,$sql);
if(mysqli_num_rows($result) > 0) {
    while($row = mysqli_fetch_assoc($result)) {
        while($thead_done == 0) {
            echo "<thead>";
            foreach($row as $rkey => $rvalue) {
                echo "<th>";
                switch($rkey) {
[bunch of cases to make the table headers human readable]
                    default:
                        echo $rkey;
                        $s_headers[]='"' . $rkey . '"';
                }
                echo "</th>";
            }
            echo "</thead>";
            $thead_done++;

Чтобы подтвердить, что проблема не связана с содержимым 25-го столбца в моей базе данных, я изменил запрос SQLявно выбрать этот столбец, и он разбирается просто отлично.Кроме того, я уверен, что PHP просто останавливается внутри цикла foreach, потому что возвращаемый HTML заканчивается на:

<th>[column 25 header]

, означая, что закрывающий тег в последней строке цикла не был отображен в echo'е.

К сожалению, у меня нет доступа к журналам PHP на этом веб-сервере, поэтому мне еще сложнее понять, почему он просто останавливается на этой позиции.

Обновление: я изменил начало кодаочень немного, для целей отладки, но он ведет себя так же.Полный код:

$result = mysqli_query($con,$sql);
if(mysqli_num_rows($result) > 0) {
    while($row = mysqli_fetch_assoc($result)) {
        print_r(array_keys($row));
        while($thead_done == 0) {
            echo "<thead>";
            foreach(array_keys($row) as $rkey) {
                echo "<th>";
                switch($rkey) {
                    case "ppower":
                        echo "Plasma Power";
                        $s_headers[]="Plasma Power";
                        break;
                    case "cathodel":
                        echo "Cathode Length";
                        $s_headers[]="Cathode Length";
                        break;
                    default:
                        echo $rkey;
                        $s_headers[]='"' . $rkey . '"';
                }
                echo "</th>";
            }
            echo "</thead>";
            $thead_done++;
            /* Spout XLS GENERATION */
            $writer = WriterFactory::create(Type::XLSX);
            $writer->openToFile($filename);
            $style = (new StyleBuilder())->setFontBold()->build();
            $writer->addRowWithStyle($s_headers, $style);
        }
        unset($s_data);
        echo "<tr>";
        foreach($row as $rkey => $rvalue) {
            if($rkey == "magnet_id") {
                echo "<td><a href=\"details.php?id=" . $rvalue . "\">" . $rvalue . "</td>";
                $s_data[]=$rvalue;
            } else if($rkey =="edms") {
                echo "<td><a href=\"[URL here]" . $rvalue . "/1\" target=\"_blank\">" . $rvalue . "</a></td>";
                $s_edms = '=HYPERLINK("[URL here]' . $rvalue . '","' . $rvalue . '")';
                $s_data[]=$s_edms;
            } else {
                echo "<td>" . $rvalue . "</td>";
                $s_data[]=$rvalue;
            }
        }
        echo "</tr>";
        $writer->addRow($s_data);
    }
    $writer->close();
}

Кроме того, печать всех ключей массива $ result подтверждает, что возвращены все данные:

Array ([0] => magnet_id [1] => magnet_type [2] => origin [3] => плановое время [4] => vc_id [5] => удалено [6] => удалено_ время [7] => ir1 [8] => с покрытием [9] => coat_run [10] => coat_time [11] => system [12] => sey [13] => ir2 [14] => lastop [15] => edms [16] => pump_time [17] => давление[18] => ccomment [19] => bakeout [20] => продолжительность [21] => давление [22] => напряжение [23] => ток [24] => ppower [25] => катод [26]] => pdensity [27] = >ified_time [28] => reinstalled_loc [29] => reinstalled_time [30] => username [31] => sample_id [32] => rfqc [33] => rfqc_time [34] => rfqc_comment)

Но таблица все равно выглядит так:

<thead><th>Asset ID</th><th>Asset Type</th><th>Position</th><th>Scheduled</th><th>Vacuum Chamber</th><th>removed</th><th>Removed</th><th>ir1</th><th>Coated</th><th>Coating Run</th><th>Coating Time</th><th>Coating System</th><th>SEY</th><th>ir2</th><th>lastop</th><th>EDMS</th><th>Start Pumping Time</th><th>P-limit</th><th>ccomment</th><th>bakeout</th><th>Proc. Duration</th><th>Proc. Pressure</th><th>Plasma Voltage</th><th>Plasma Current</th><th>Plasma Power
:EOF
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...