PHP未定义数组返回错误值

时间:2019-04-02 07:15:19

标签: php arrays

问这样一个愚蠢的问题似乎很奇怪。 但是,我无法弄清楚为什么用这么小的代码就得到了错误的价值。

代码是:

<?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'];
}

enter image description here

我希望输出为空,但是它返回字符串的第一个字符。我知道检查其is_arrayisset是否可以解决我的问题。

但是我想了解为什么会发生这种情况?

3 个答案:

答案 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