Как получить значение по ключу из вложенного массива?
В Laravel с помощью построителя запросов получаю коллекцию $cena_put,
$product1 = $cena_put->whereIn('id', 71484);
но у неё индекс каждый раз меняется при перезагрузки страницы
Нашел способ получить доступ к вложенному массиву с помощью foreach:
foreach ($product1 as $item)
{
print_r($item->cena);
echo '<pre>';
print_r($cena_put);
echo '</pre>';
}
Однако способ с foreach мне не совсем нравится, есть ли другой способ получить значение из вложенного массива, минуя его индекс, ибо он генерируется каждый раз по новой при перезагрузки страницы, и возможно ли это?
Ответы (1 шт):
Допустим у Вас есть переменная $items типа Illuminate\Support\Collection
Вариант №1
Как верно заметил @u_mulder, если Вам просто нужно получить первый элемент - вы можете воспользоваться методом first
$first = $items->first();
Вариант №2
Если Вам нужно получить массив с более подходящими для работы ключами, то вы просто можете получить список значений коллекции без привязки к старым ключам с помощью метода values(). Фактически это обертка над функцией array_values(см документацию https://www.php.net/manual/ru/function.array-values)
Таким образом Вы можете получить массив со всеми значениями(без сохранения прежних ключей) и там уже у вас будут обычные ключи, начинающиеся с нуля (0,1,2,...);
И получить элемент можно будет по индексу 0,1,...
$first = $items->values()[0];
$second = $items->values()[1];
// ...
Вариант №3
Также вы можете получить все значения коллекции с помощью метода all() и уже над этим массивом пытаться проводить эксперименты. Например с помощью array_key_first узнать ключ первого элемента.
И получить его из коллекции по индексу или же получить массив всех ключей с помощью функции array_keys(https://www.php.net/manual/ru/function.array-keys.php)
и получать нужные ключи по все тем же ключам 0,1,2,...
$all = $items->all();
$firstKey = array_key_first($all);
$first = $items->get($firstKey);
$keys = array_keys($all);
$second = $items->get($keys[1]);
$third = $items->get($keys[2]);
// ...

