У меня вопрос:
$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?
@ DieterKräutl получает ошибку Cannot use object of type stdClass as array
, когда я делал $remain_ = $stockBook[0]['REMAINING'];
$ stockBook = (массив) $ stockBook;
@ user4221591 вы используете laravel. Поэтому вам следует использовать вспомогательные функции коллекции laravel, это будет очень просто, а также поможет нам минимизировать ошибки в исходном коде. можно использовать этот анвер https://stackoverflow.com/a/52312233/10288451
Нумерация массивов начинается с 0, поэтому первым элементом является $ array [0], а не $ array [1].
$stockBook = (array)$stockBook;
$remain_ = $stockBook[0]['REMAINING'];
Зачем преобразовывать $ stockBook в множество, если он, согласно var_dump, уже является множество?
Из-за его комментария -> ошибка @ DieterKräutl. Невозможно использовать объект типа stdClass в качестве массива, когда я сделал $ stay_ = $ stockBook [0] ['REMAINING']; - user4221591 12 минут назад
Что ж, это все объясняет;)
все еще не понял, почему вы должны преобразовать его в массив? а если записей будет 10 млн? можно обойтись без литья. Пожалуйста, проверьте мой ответ. ;)
Если это ваша структура данных
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, если вы считаете, что это полезно для вас, отметьте, пожалуйста, как проверенное. Это будет оценено по достоинству.
Коллекции очень удобны, но этот ответ не поможет понять разницу между массивом и объектами :) @ user4221591 лучше прочтите мой ответ, но все же используйте этот;)
Попробуй это:
$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]
Хотя этот фрагмент кода может решить вопрос, включая объяснение действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причины вашего предложения кода.
отсчет начинается с 0, а не с 1. Это будет $ stay_ = $ stockBook [0] ['REMAINING']; или $ stay_ = $ stockBook [0] ['# 533'] ['ОСТАЛОСЬ'];