Почему этот цикл foreach повторяется дважды? - PullRequest
0 голосов
/ 22 октября 2018

Вопрос действительно в названии - у меня есть цикл foreach, и он, кажется, дважды перебирает мой массив.

ob_start();

$array = str_split(strtolower($_GET['text']));

foreach ($array as $char) {
    error_log($_GET['text'] . ', ' . sizeof($array) . ', ' . $char);
}

$result = ob_get_contents(); 

Я обнаружил, что приведенный выше код создает следующий журнал при передачеURL-адрес примерно такой: index.php?text=Hi

[22-Oct-2018 20:05:37 Europe/London] Hi, 2, h
[22-Oct-2018 20:05:37 Europe/London] Hi, 2, i
[22-Oct-2018 20:05:37 Europe/London] Hi, 2, h
[22-Oct-2018 20:05:37 Europe/London] Hi, 2, i

Отладка показывает, что массив имеет длину только 2, поэтому я действительно не уверен, что это может быть.Спасибо!


После дополнительной отладки я обнаружил следующее:

if (!isset($_GET['text'])) {
    header('HTTP/1.0 404 Not Found');
    die();
}

echo uniqid() . '</br>';

//ob_start();

$total = 0;
$array = str_split(strtolower($_GET['text']));

foreach ($array as $char) {
    echo $_GET['text'] . ', ' . sizeof($array) . ', ' . $char . '</br>';
}

//$result = ob_get_contents();

echo $result;

Создает это:

5bce311d3d6bd
Hi, 2, h
Hi, 2, i

Но без комментариев оба прокомментировалилинии, дает мне это:

5bce313b9f29d
Hi, 2, h
Hi, 2, i
Hi, 2, h
Hi, 2, i

1 Ответ

0 голосов
/ 22 октября 2018

Я думаю, что, возможно, мне нужно больше узнать о функциональности ob_...?

Этот следующий код выглядит непротиворечивым и надежным:

if (!isset($_GET['text'])) {
    header('HTTP/1.0 404 Not Found');
    die();
}

echo uniqid() . '</br>';

ob_start();

$total = 0;
$array = str_split(strtolower($_GET['text']));

foreach ($array as $char) {
    echo $_GET['text'] . ', ' . sizeof($array) . ', ' . $char . '</br>';
}

ob_flush();
...