首页 > 解决方案 > 为什么这个 foreach 循环迭代两次?

问题描述

问题确实在标题中 - 我有这个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

标签: phpphp-7.2

解决方案


我想我可能需要更多地了解该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();

推荐阅读