Попытка доступа к массиву в объекте приводит к ошибке - свойство Undefined: stdClass::$files

Я передаю объект, который содержит массив в качестве ввода формы. Когда я пытаюсь получить доступ к массиву (и подсчитать элементы), я получаю сообщение об ошибке 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) выдает ошибку?

Спасибо вам за помощь!

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
32
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вместо:

if (count($d->files)!==0) { ... }

Попробуйте проверить, является ли массив не пустой.

if (!empty($d->files)) { ... }

PHP: пусто - Вручную

Дополнительное примечание:

Не используйте здесь isset, так как это работает только для проверки того, объявлена ​​ли переменная, а не null.

PHP: isset - Вручную

Сравнение 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';
}
?>

Другие вопросы по теме