Получение значений из каждого объекта json определенного ключа

#php #json #laravel

#php #json #laravel

Вопрос:

В моем одном проекте мне потребовалось извлечь каждое phone из входных json. Ввод Json что-то вроде:

 [
      {
          "name": "Niyo",
        "email": "niyo@ymail.com",
        "phone": "8989457845"
      },
      {
          "name": "Picks",
        "email": "picks.p@gmail.com",
        "phone": "7878121245"
      },
      {
          "name": "Chintz",
        "email": "Chintz@gmail.com",
        "phone": "8745421254"
      },
      {
          "name": "Kabiru Wabyu",
        "email": "kabiru.v@gmail.com",
        "phone": ""
      },
      {
          "name": "Rons",
        "email": "",
        "phone": "9898989898"
      }
]
  

Я знаю одно решение для извлечения каждого телефона из входного json contact

foreach($contacts as $phone){
$phones[]=$phone->phone;
}

Есть ли какой-либо альтернативный способ в php / laravel получить все значения из входного json для определенного ключа?

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

1. вы не используете json_decode()?

2. array_column может быть тем, что вам нужно. У вас должен быть PHP 5.5 или более поздний.

3. @devpro он должен быть, иначе foreach не будет работать

4. Смотрите Руководство для array_column() его большого небольшого ресурса для программистов, руководство, которое

5. @Chintan7027: Hii ..здесь я предоставляю ссылку [ jonsuh.com/blog /… это полезно во многих вещах, а также полезно для этого вопроса. Я знаю, что приведенный ниже ответ уже решил вашу проблему. Пожалуйста, просмотрите его, может быть полезно.:)

Ответ №1:

Это должно вернуть то, что вы ищете, при условии, что у вас есть PHP 5.5 или более поздняя версия. Не уверен, нужно ли устанавливать второму параметру json_decode значение TRUE, которое возвращает массив массивов, а не массив объектов.

 $x = json_decode(yourjson, TRUE);
$phones = array_column($x, 'phone');
  

Ответ №2:

Поскольку у вас уже есть это как массив, вы можете использовать array_map

 $phones = array_map(function($contact) { return $contact->phone; }, $contacts);
  

Ответ №3:

Вы можете использовать вспомогательные функции Laravel:

 $phones = array_pluck($contacts, 'phone'); 
  

или коллекция:

 $contacts = collect($contacts);
$phones = $contacts->pluck('phone');
  

и не забудьте проанализировать JSON как массив:

 $contacts = json_decode($json, true);