PHP如何将foreach遍历数组的输出保存为可读变量
错误原因分析
- ob系列函数使用逻辑错误
你先执行了printArray($_POST)再调用ob_start(),输出缓冲区开启前的echo内容已经直接输出,不会被捕获,自然拿不到内容。 - 直接赋值方案的四处问题
- 语法错误:变量定义写为
&out = “”,多了多余的&符号,且使用了PHP不识别的中文双引号,应改为$out = "" - 变量作用域问题:函数内部默认无法直接访问外部定义的
$out变量,需要声明global或者通过引用传参 - 赋值逻辑错误:循环内每次用
=给$out赋值会覆盖之前的内容,应该用.=拼接字符串 - 函数没有返回值,外部无法拿到函数内拼接好的内容
正确实现方案
方案1:使用输出缓冲区的正确写法
// 先开启输出缓冲 ob_start(); // 再调用执行echo的函数 printArray($_POST); // 捕获缓冲区内容 $out = ob_get_contents(); // 关闭清空缓冲 ob_end_clean(); function printArray($array){ foreach ($array as $key => $value){ echo "$key: $value <br>"; } } print $out;
方案2:直接返回拼接字符串(更推荐,性能更高)
function printArray($array){ // 初始化空字符串 $out = ''; foreach ($array as $key => $value){ // 拼接每一行内容 $out .= "$key: $value <br>"; } // 返回拼接完成的字符串 return $out; } $out = printArray($_POST); print $out;
内容的提问来源于stack exchange,提问作者Taylor Johnson
相关产品推荐
相关产品推荐

