PHP代码执行echo时为何追加输出‘1’?
为什么这段PHP代码会额外输出一个‘1’?
嘿,这个问题其实是PHP里print_r()函数的一个常见小陷阱,咱们一步步拆解就清楚了:
首先看你写的代码:
<?php $bp = array(); echo print_r($bp).'<BR>'; ?>
关键原因:print_r()的双重行为
print_r()函数有两种工作模式:- 默认模式(无第二个参数):它会直接把变量的结构(这里是空数组
Array ( ))输出到页面,同时返回布尔值true。 - 当你给它传第二个参数
true时,它不会直接输出内容,而是把变量结构以字符串形式返回,让你可以用echo或者其他方式处理。
- 默认模式(无第二个参数):它会直接把变量的结构(这里是空数组
你的代码执行顺序
- 先执行
print_r($bp):直接输出Array ( ),同时返回true。 - 然后把
print_r($bp)的返回值true和<BR>拼接,得到字符串'1<BR>'(因为PHP里布尔值true被echo时会自动转成字符串'1')。 - 最后
echo输出这个拼接后的字符串,也就是额外的1加上换行。
所以最终页面上的输出就是:
Array ( )1
怎么解决这个问题?
如果你不想看到额外的1,只需要给print_r()加上第二个参数true,让它返回内容而不是直接输出,再用echo打印:
<?php $bp = array(); echo print_r($bp, true).'<BR>'; ?>
这样就只会输出Array ( )<br>,不会有多余的1啦!
内容的提问来源于stack exchange,提问作者Mike Harris
相关产品推荐
相关产品推荐

