从特定键的每个json对象获取值

时间:2016-10-06 14:58:14

标签: php json laravel

在我的一个项目中,我需要从输入json中提取每个phone。 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中获取特定键的所有值?

3 个答案:

答案 0 :(得分:1)

由于您已将此作为数组使用,因此可以使用array_map

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

答案 1 :(得分:1)

如果您有最近的PHP 5.5或更高版本,这应该返回您正在寻找的内容。不确定是否有必要将json_decode的第二个参数设置为TRUE,这将返回一个数组数组,而不是对象数组。

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

答案 2 :(得分:1)

您可以使用Laravel辅助函数:

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

或收藏品:

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

并且不要忘记将JSON解析为数组:

$contacts = json_decode($json, true);