Получение данных из атрибута массива

У меня вопрос:

$stockBook = DB::select(DB::Raw(" my query"));
dump($stockBook);

Моя о / п:

array:1 [▼
  0 => {#533 ▼
    +"BOOKID": "1"
    +"REMAINING": 17.0
  }
]

Я хочу получить данные атрибута REMAINING, но получаю сообщение об ошибке. Я пытался :

$remain_ = $stockBook[1]['REMAINING'];
Undefined offset: 1

снова я попробовал

$remain_ = $stockBook->REMAINING;
Trying to get property 'REMAINING' of non-object

Как получить значение атрибута REMAINING?

отсчет начинается с 0, а не с 1. Это будет $ stay_ = $ stockBook [0] ['REMAINING']; или $ stay_ = $ stockBook [0] ['# 533'] ['ОСТАЛОСЬ'];

Dieter Kräutl 13.09.2018 12:40

@ DieterKräutl получает ошибку Cannot use object of type stdClass as array, когда я делал $remain_ = $stockBook[0]['REMAINING'];

user4221591 13.09.2018 12:45

$ stockBook = (массив) $ stockBook;

Dieter Kräutl 13.09.2018 12:46

@ user4221591 вы используете laravel. Поэтому вам следует использовать вспомогательные функции коллекции laravel, это будет очень просто, а также поможет нам минимизировать ошибки в исходном коде. можно использовать этот анвер https://stackoverflow.com/a/52312233/10288451

Lakhwinder Singh 13.09.2018 12:59
Стоит ли изучать 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 и хотите разрабатывать...
1
4
94
5

Ответы 5

Нумерация массивов начинается с 0, поэтому первым элементом является $ array [0], а не $ array [1].

$stockBook = (array)$stockBook;
$remain_ = $stockBook[0]['REMAINING'];

Зачем преобразовывать $ stockBook в множество, если он, согласно var_dump, уже является множество?

inquam 13.09.2018 12:56

Из-за его комментария -> ошибка @ DieterKräutl. Невозможно использовать объект типа stdClass в качестве массива, когда я сделал $ stay_ = $ stockBook [0] ['REMAINING']; - user4221591 12 минут назад

Dieter Kräutl 13.09.2018 12:58

Что ж, это все объясняет;)

inquam 13.09.2018 13:01

все еще не понял, почему вы должны преобразовать его в массив? а если записей будет 10 млн? можно обойтись без литья. Пожалуйста, проверьте мой ответ. ;)

Aleksandrs 14.09.2018 06:51

Если это ваша структура данных

array:1 [▼
  0 => {#533 ▼
    +"BOOKID": "1"
    +"REMAINING": 17.0
  }
]

и это то, что ты делаешь

$remain_ = $stockBook[1]['REMAINING'];
    Undefined offset: 1

Затем сообщение об ошибке объясняет первую часть вашей проблемы. Вы пытаетесь получить доступ к элементу с индексом 1 в массиве, который имеет только один элемент с индексом 0. Массивы начинаются с нуля. Это означает, что первым элементом является 0, вторым - 1 и т. д. Итак, вы пытаетесь получить доступ к несуществующему элементу.

Вторая проблема, согласно вашему комментарию

Cannot use object of type stdClass as array when I did $remain_ = $stockBook[0]['REMAINING'];

указывает, что каждый элемент в массиве является объектом. Итак, чтобы получить атрибут REMAINING объекта с индексом 0 в массиве, вы могли бы сделать.

echo $stockBook[0]->REMAINING; // would print "17.0"

если у вас есть только один объект внутри массива, вы можете использовать это

$arr = array:1 [▼
            0 => {#533 ▼
                "BOOKID": "1"
                "REMAINING": 17.0
            }
        ]

$object = collect($arr);
$item = $object->first();
dd($item->REMAINING);

Но если у вас есть несколько объектов внутри массива, используйте это

$arr = array:1 [▼
            0 => {#533 ▼
                "BOOKID": "1"
                "REMAINING": 17.0
            },
            1 => {#533 ▼
                "BOOKID": "1"
                "REMAINING": 17.0
            }
        ]
$object = collect($arr);
$list = $object->pluck("REMAINING");
dd($list);

Используя приведенный выше пример, вы получите список всех остатков от объекта массива.

Надеюсь, что это поможет вам.

@ user4221591, если вы считаете, что это полезно для вас, отметьте, пожалуйста, как проверенное. Это будет оценено по достоинству.

Priyanka khullar 13.09.2018 13:05

Коллекции очень удобны, но этот ответ не поможет понять разницу между массивом и объектами :) @ user4221591 лучше прочтите мой ответ, но все же используйте этот;)

Aleksandrs 14.09.2018 07:04

Попробуй это:

$stockBook[0]->REMAINING;

If you want to retrieve element from array use []

If you want to retrieve element from object use ->

В вашем примере мы видим, что у вас есть массив объектов php, тогда вы должны использовать оба.

    foreach((array)$stockBook as $key => $value){  // $stockBook or $stockBook[0]
        var_dump($key, $value);
    }
    // or
    var_dump($stockBook->BOOKID, $stockBook->REMAINING); // $stockBook or $stockBook[0]

Хотя этот фрагмент кода может решить вопрос, включая объяснение действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причины вашего предложения кода.

BlueCacti 13.09.2018 14:14

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