Я передаю объект, который содержит массив в качестве ввода формы. Когда я пытаюсь получить доступ к массиву (и подсчитать элементы), я получаю сообщение об ошибке Undefined property: stdClass::$files
Когда я var_dump всего объекта, я получаю это, что и ожидалось:
object(stdClass)[29]
public '6' =>
object(stdClass)[28]
public 'files' =>
array (size=0)
empty
public 'packages' =>
array (size=1)
0 => string 'program_data/6/packages/1646756076.zip' (length=38)
public 'scripts' =>
array (size=1)
0 => string 'program_data/6/scripts/MEER_munger.py' (length=37)
Я пытаюсь проверить, пуст ли массив файлов. В моем коде у меня есть это:
foreach($selectedFiles as $key=>$d){
var_dump($d->files);
if (count($d->files)!==0) {
mkdir($dir.'/files');
foreach($d->files as $file) {
$source = FCPATH.$file;
$fileName = substr($file, strrpos($file, '/') + 1);
copy($source,$dir.'/files/'.$fileName);
}
}
}
var_dump файлов $d-> показывает мне пустой массив. Итак, если это массив, почему count($d->files) выдает ошибку?
Спасибо вам за помощь!
Вместо:
if (count($d->files)!==0) { ... }
Попробуйте проверить, является ли массив не пустой.
if (!empty($d->files)) { ... }
Дополнительное примечание:
Не используйте здесь isset
, так как это работает только для проверки того, объявлена ли переменная, а не null
.
Сравнение empty()
и isset()
, скопировано из руководство по PHP:
<?php
$var = 0;
// Evaluates to true because $var is empty
if (empty($var)) {
echo '$var is either 0, empty, or not set at all';
}
// Evaluates as true because $var is set
if (isset($var)) {
echo '$var is set even though it is empty';
}
?>