получение данных из атрибута массива - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть запрос:

$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?

Ответы [ 5 ]

0 голосов
/ 13 сентября 2018
    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]
0 голосов
/ 13 сентября 2018

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

$stockBook[0]->REMAINING;

Если вы хотите извлечь элемент из массива, используйте []

Если вы хотите извлечь элемент из объекта, используйте ->

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

0 голосов
/ 13 сентября 2018

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

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

и это то, что вы делаете

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

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

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

Невозможно использовать объект типа stdClass в качестве массива, когда я сделал $ stay_ = $ StockBook [0] [ 'ОСТАЛОСЬ'];

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

echo $stockBook[0]->REMAINING; // would print "17.0"
0 голосов
/ 13 сентября 2018

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

$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);

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

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

0 голосов
/ 13 сентября 2018

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

$stockBook = (array)$stockBook;
$remain_ = $stockBook[0]['REMAINING'];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...