Получить все данные в теле с помощью Guzzle в Laravel из внешнего API - PullRequest
0 голосов
/ 27 мая 2020

Я хочу получить только электронную почту в ответе JSON, используя guzzle in Laravel из внешнего API. Вот что я пробовал

//Get all customer 
$allcus = 'https://api.paystack.co/customer';
$client = new Client();
$response = $client->request('GET', $allcus, [
  'headers' => [
    'Authorization' => 'Bearer '.'sk_live_#########################',
  ],
]); 

$cus_data = json_decode($response->getBody()->getContents()); 
//returns a json response of all customers
//dd($cus_data);

$cus_data_email = $cus_data->data->email;
dd($cus_data_email);

Использование этого возвращает ошибку

$cus_data_email = $cus_data->data->email;

"message": "Попытка получить свойство 'email' не-объекта"

Но когда я попробовал это, он возвращает клиента в первом массиве

$cus_data_email = $cus_data->data[0]->email;

Я не хочу возвращать только одно электронное письмо клиента. Я хочу получить все электронные письма клиентов.


Таким образом, ответ JSON будет

{
  "status": true,
  "message": "Customers retrieved",
  "data": [
    {
      "integration": ######,
      "first_name": null,
      "last_name": null,
      "email": "a###$gmail.com",
      "phone": null,
      "metadata": null,
      "domain": "live",
      "customer_code": "CUS_##########",
      "risk_action": "default",
      "id": #######,
      "createdAt": "2020-05-26T00:50:12.000Z",
      "updatedAt": "2020-05-26T00:50:12.000Z"
    },
    ...

1 Ответ

1 голос
/ 28 мая 2020

То, что вы ищете, - это l oop!

$cus_data->data - это массив , который является переменной, которая может хранить несколько значений однажды. Доступ к ним можно получить с помощью индекса и обычно можно увидеть с помощью циклов.

Я настоятельно рекомендую прочитать две предоставленные мной ссылки, l oop, которое я буду использовать, это foreach l oop , так как он наиболее читаемый в данном контексте. У всех циклов есть свое место, поэтому было бы полезно познакомиться с ними.

$emailsArray = []; // initialise an array
$emailsString = ""; // initialise a string

// Here's our loop, which will go over all the values of $cus_data->data
foreach($cus_data->data as $datum) {

    // $datum is the single value in $cus_data->data which we're currently looking at
    // Each of these values have an email property, which we access with arrow notation

    array_push($emailsArray, $datum->email); // add the email to our array
    $emailsString = $emailsString . $datum->email . ", "; // add the email to our string

}

После этого $emailsArray будет массивом (как мы узнали выше!) Со всеми электронными письмами от $cus_data->data.

$emailsString будет содержать ту же информацию, только в виде строки, разделенной запятыми.

Одна вещь, на которую следует обратить внимание, - это если некоторые из ваших данных не имеют электронных писем! Тогда приведенный выше код может дать сбой.

По общему признанию, это не самое короткое решение. Для такой проблемы я бы, вероятно, использовал array_map . Код здесь делает то же самое в более подробном формате, чтобы мы могли лучше его понять.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...