2016-10-06 87 views
1

在我的一個項目中,我需要從輸入json中提取每個phone。 JSON輸入類似:從特定鍵的每個json對象獲取值

[ 
     { 
      "name": "Niyo", 
     "email": "[email protected]", 
     "phone": "8989457845" 
     }, 
     { 
      "name": "Picks", 
     "email": "[email protected]", 
     "phone": "7878121245" 
     }, 
     { 
      "name": "Chintz", 
     "email": "[email protected]", 
     "phone": "8745421254" 
     }, 
     { 
      "name": "Kabiru Wabyu", 
     "email": "[email protected]", 
     "phone": "" 
     }, 
     { 
      "name": "Rons", 
     "email": "", 
     "phone": "9898989898" 
     } 
] 

我知道一個解決方案,從輸入JSON contact

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

提取每個手機是否有在PHP/laravel任何替代方式來獲得輸入JSON的所有值具體的關鍵?

+1

yru不使用json_decode()? – devpro

+1

array_column可能是你需要的。你最近必須有5.5或更高的PHP版本。 – Craig

+1

@devpro他必須否則該foreach不會工作 – RiggsFolly

回答

1

這應返回你正在尋找的東西,只要你有PHP 5.5或更近一些。不知道是否有必要將json_decode的第二個參數設置爲TRUE,它返回一個數組數組,而不是數組對象。

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

既然你已經有這個作爲一個數組,你可以使用array_map

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

可以使用Laravel輔助功能:

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

或Collection:

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

,不要忘記解析JSON作爲數組:

$contacts = json_decode($json, true);