набор записей php в Laravel @foreach альтернатива

#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> делает то же самое, что и PHP break ?

2. Нет тега <br>, и разрыв php отличается. php прерывает, прерывает условие цикла и тег <br> прерывает строку. И следующий результат отобразится в следующей строке.

3. Пожалуйста, добавьте все разъяснения в свой ответ, отредактировав его. Если эти два подхода работают совершенно по-разному, почему вы рекомендовали оба?

4. для каждого ($сайты как $сайт) <img src=»{{$сайт->url}}» alt=»Pic» id=»bg-img» onclick = заполнить() /<img src=»{{$сайт->> прервать конец для каждого это покажет только одно изображение, если этот $сайты представляет собой один размерный массив

5. тег <br> показывает все изображения в разных-разных строках. это совсем другое.