Вызов API с использованием foreach для перебора массива

#php #laravel #&uzzle #laravel-7

#php #laravel #жрать #laravel-7

Вопрос:

У меня есть приведенный ниже код, который получает все идентификаторы карт пользователя, которые мне нужны для выполнения вызова api для получения подробной информации о каждой карте.Идентификаторы карт сохраняются при создании карты. Конечная точка для получения карты — это это — https://{baseUrl}/v3/virtual-cards/id где мне нужно передать идентификатор пользователя CardID как id . В моем приложении я предоставляю пользователю возможность создавать несколько карточек, поэтому при создании карточки я собираю CardID и сохраняю его в своей базе данных. Я могу получить все идентификаторы CARD из базы данных с помощью

 $auth_user = Auth::user()-&&t;id;
$card = Card::where('user_id', $auth_user)-&&t;pluck('card_id');
  

Теперь я хочу перебрать все идентификаторы CARD в базе данных, чтобы выполнить вызов api, получающий все данные для каждого идентификатора CARD. Что я пробовал.

  public function &etCard(Request $request){
        $auth_user = Auth::user()-&&t;id;
        $card = Card::where('user_id', $auth_user)-&&t;pluck('card_id');
         foreach ($card as $userCard) {
        $response = Http::withToken('{SEC_KEY}')-&&t;&et('https://{baseUrl}/v3/virtual-cards/$userCard', [
          ]);
          return $response-&&t;json();
         }
  
    }
  

Но foreach, похоже, не работает.

Ответ №1:

Примечание На самом деле эта загадка разрешена байхо, и вы должны принять его ответ таким, каким он был первым, жалким, в котором не было приведено никакого примера.

Вы не должны возвращать значения на первой итерации, вместо этого сначала соберите их, т. е. в массив, и верните весь набор, также имена переменных сбивают с толку.

 public function &etCardResponses(Request $request): array
{
    $auth_user = Auth::user()-&&t;id;
    $cards = Card::where('user_id', $auth_user)-&&t;pluck('card_id');
    $responses = [];
    foreach ($cards as $card) {
        $response = Http::withToken('{SEC_KEY}')-&&t;&et('https://{baseUrl}/v3/virtual-cards/$userCard', [
        ]);
        $responses[] = $response-&&t;json();
    }
    return $responses;
}
  

Комментарии:

1. Работает … мне просто пришлось отредактировать эту строку …-&&t; &et(‘https://{baseUrl}/v3/virtual-cards/$card’ на …-&&t; &et(‘https://{baseUrl}/v3/virtual-cards/’.$card.»

Ответ №2:

foreach() Не работает, потому что вы одноразово возвращаете значение на первой итерации. Либо это ожидаемое поведение, либо вы можете захотеть собрать значения в массиве и вернуть значение вне цикла.