问这样一个愚蠢的问题似乎很奇怪。 但是,我无法弄清楚为什么用这么小的代码就得到了错误的价值。
代码是:
<?php
error_reporting(0);
$result_all = 'User not found';
if($result_all['BookingDetail']['BookingReference']){
echo "<br>Output in if :- ".$result_all['BookingDetail']['BookingReference'];
}else{
echo "<br>Output in else:- ".$result_all['BookingDetail']['BookingReference'];
}
我希望输出为空,但是它返回字符串的第一个字符。我知道检查其is_array
和isset
是否可以解决我的问题。
但是我想了解为什么会发生这种情况?
答案 0 :(得分:0)
问题:-
您正在将
'User not found'
分配给脚本中的$result_all
变量,这使其成为字符串变量。由于
$result_all
是一个字符串,因此BookingDetail
之类的任何索引都被视为该字符串的0,这就是为什么它将给出字符串的第一个字符的原因
解决方案:-
您需要使用isset()
来检查索引是否存在?
<?php
//comment these two lines when code started working fine
error_reporting(E_ALL);
ini_set('display_errors',1);
if( isset( $result_all['BookingDetail']['BookingReference'] ) ){
echo "<br>Output in if :- ".$result_all['BookingDetail']['BookingReference'];
}else{
echo "<br>Output in else:- User not found";
}
答案 1 :(得分:0)
我在PHP 7.3上运行了
这是输出:
Output in if :- UIllegal string offset 'BookingReference' on line 5
请考虑升级您的PHP版本
答案 2 :(得分:0)
因为变量名称相同,所以将其转换为数组。
通过执行$result_all
在ARRAY中
$result_all['BookingDetail']['BookingReference']
,并且未定义要显示的数组值,因此默认情况下它将显示字符串的第一个字符。
$result_all = 'User not found';
输出:-U