#php #arrays
#php #массивы
Вопрос:
Может показаться странным задавать такой глупый вопрос. Однако я не могу понять, почему я получаю неправильное значение с таким маленьким фрагментом кода.
Код является:
<?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
, решит мою проблему.
Но я хочу понять, почему это происходит?
Комментарии:
1. в вашем коде путаница, вы назначили $result_all в качестве переменной, а в другой строке вы проверяете ее на наличие массива?? как это возможно?
2. Эта переменная является строкой, а не массивом
$result_all
, вы переопределяете эту переменную на string
Ответ №1:
Проблема:-
Вы присваиваете переменной
'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";
}
Ответ №2:
Я запускал это на PHP 7.3
Это вывод:
Output in if :- UIllegal string offset 'BookingReference' on line 5
Пожалуйста, рассмотрите возможность обновления вашей версии PHP
Ответ №3:
Потому что вы преобразуете его в массив из-за того же имени переменной.
$result_all
в МАССИВЕ, выполнив это$result_all['BookingDetail']['BookingReference']
и не определите, какое значение массива вы хотите показать, поэтому по умолчанию он показывает первый символ строки.
$result_all = 'User not found';
Вывод:- U