PHP isset возвращает true, но должно быть false
Мой проект находится в cakePHP, но я думаю, что это аспект родного PHP, который я неправильно понимаю..
у меня есть afterFind($results, $primary = false)
метод обратного вызова в моем AppModel
, На одной конкретной находке, если я debug($results);
Я получаю массив, как это
array(
'id' => '2',
'price' => '79.00',
'setup_time' => '5',
'cleanup_time' => '10',
'duration' => '60',
'capacity' => '1',
'discontinued' => false,
'service_category_id' => '11'
)
В моем afterFind
У меня есть такой код:
foreach($results as &$model) {
// if multiple models
if(isset($model[$this->name][0])) {
....
Результаты находки взяты из моего Service
модель так вставив, что для $this->name
и проверка if(isset($model['Service'][0]))
должен вернуть false, но он возвращает true? if(isset($model['Service']))
возвращает false, как и ожидалось.
Я получаю следующее предупреждение PHP:
Недопустимое смещение строки 'Сервис'
так что здесь происходит? Почему if(isset($model['Service'][0]))
вернуть true, если if(isset($model['Service']))
возвращает ложь?
ОБНОВИТЬ:
Я до сих пор не знаю ответа на свой первоначальный вопрос, но я обошел его, сначала проверив, является ли $results многомерным массивом с
if(count($results) != count($results, COUNT_RECURSIVE))
2 ответа
Использование array_key_exists()
или же empty()
вместо isset()
, PHP странно кэширует старые значения массива. Они должны быть сброшены вручную с помощью unset()
isset() не возвращает TRUE для ключей массива, соответствующих значению NULL, в то время как array_key_exists() делает.
Смещение строк обеспечивает механизм для использования строк, как если бы они были массивом символов:
$string = 'abcde';
echo $string[2]; // c
$model
действительно строка для всех ключей, кроме прекращенных.
Для isset($model['Service'][0])
Возвращаемое значение, я немного удивлен. Это упрощенный тестовый пример:
$model = '2';
var_dump(isset($model['Service'])); // bool(false)
var_dump(isset($model['Service'][0])); // bool(true)
Где-то должна быть причина. Придется копать..