#php #laravel #foreach
Вопрос:
Не могли бы вы сказать мне, как это сделать правильно, пожалуйста?
Я использую Laravel 8. Передаю набор записей на страницу, с которой я работаю с помощью цикла foreach позже на странице. Как мне извлечь из него данные без forloop? Я предвидел это, используя
@foreach ($sites as $site)
<img src="{{$site->url}}" alt="Pic" id="bg-img" onclick = fill() />
@break
@endforeach
Я использовал цикл foreach, как он работает позже на странице.
Да, это работает, но я хотел бы знать, как правильно.
Я тоже пытался:
{{$site->url}}
{{$sites->url}}
$sites['url']
Я новичок в Laravel и разбираюсь в вещах типа массива в php.
Спасибо
Могу ли я задать этот вопрос типа улучшения?
Комментарии:
1. Если это набор из нескольких записей, почему вы хотите удалить цикл?
Ответ №1:
Я только что объяснил некоторые из ваших заявлений.
Например, у вас есть такие данные:
----------------------------
| id | url |
----------------------------
| 1 | http://domain-1.tld |
| 2 | http://domain-2.tld |
| 3 | http://domain-3.tld |
| 4 | http://domain-4.tld |
| 5 | http://domain-5.tld |
----------------------------
Например, у вас есть запрос :
$sites = Site::get();
get
Метод возвращает IlluminateSupportCollection
экземпляр, содержащий результаты запроса, где каждый результат является экземпляром объекта PHP stdClass
. Вы можете получить доступ к значению каждого столбца, обратившись к столбцу как к свойству объекта:
@foreach ($sites as $site)
{{ $site->url }}
@endforeach
- Если вы используете
$sites->url
, это будет ошибкой, потому что объекта нет :Property [url] does not exist on this collection instance.
- Если вы используете
$sites['url']
, это также будет ошибкой. - Вы можете использовать
$site['url']
, когда вы преобразуете коллекцию в массив :$sites = Site::get()->toArray();
@break
При использовании break
он завершит выполнение текущей for
, foreach
while
, do-while
или switch
структуры.
Из вашего кода потребуется только первая итерация.
@foreach ($sites as $site)
@break // stop
@endforeach
Как мне извлечь из него данные без forloop?
Похоже, вы хотите получить одну строку. Вы можете использовать first()
:
$site = Site::first();
$site->url;
Ответ №2:
если вы хотите распечатать все значения массива.тогда без петель не обойтись. если вы хотите печатать в одном значении.это возможно только с помощью только индекса/ключа.
например. //это выведет все значения $array = [‘автомобиль’,’велосипед’,’грузовик’];
foreach($массив как $значение) echo $значение; endforeach
//это печатает единственное значение echo $value[0];
Комментарии:
1. Пожалуйста, поделитесь более подробной информацией. Что заставляет вас думать, что HTML
<br>
делает то же самое, что и PHPbreak
?2. Нет тега <br>, и разрыв php отличается. php прерывает, прерывает условие цикла и тег <br> прерывает строку. И следующий результат отобразится в следующей строке.
3. Пожалуйста, добавьте все разъяснения в свой ответ, отредактировав его. Если эти два подхода работают совершенно по-разному, почему вы рекомендовали оба?
4. для каждого ($сайты как $сайт) <img src=»{{$сайт->url}}» alt=»Pic» id=»bg-img» onclick = заполнить() /<img src=»{{$сайт->> прервать конец для каждого это покажет только одно изображение, если этот $сайты представляет собой один размерный массив
5. тег <br> показывает все изображения в разных-разных строках. это совсем другое.