php - 为什么这个 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
解决方案
我想我可能需要更多地了解该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();
推荐阅读
- java-8 - 如何使用 Java 8 将 List 转换为 HashBasedTable?
- f# - F# 代码引用:我可以定义自己的具体和抽象语法吗?
- arrays - 如何更新主 CPLEX 中的数组数据
- ssl - 无法在某些 url 上提取证书组织
- functional-programming - 在 Elixir 中转换地图列表
- spring - RestController 为 GetMapping 设置默认标头
- junit4 - 当@before 部分中的代码失败时,Junit 会执行@Test 用例吗?
- html - 隐藏 URL 仅显示域
- javascript - 如何从 TypeScript 对象中获取数据?
- android - 如何使用转换工厂自动映射errorBody?