簡體   English   中英

遍歷數組PHP中的對象

[英]Iterate through objects in array PHP

我的PHP正在接收這樣的數據:

[
    {
      "EMAIL": "hello@example.com",
      "GENDER": "Male"
    },
    {
      "EMAIL": "info@example.com",
      "GENDER": "Male"
    }
  ]

所以,然后我做這樣的事情:

$entityBody=json_decode($data); //$data like the array above

foreach($entityBody as $value){
$email = $value->EMAIL;
//do something with $email

問題是foreach只運行一次,我可以成功處理第一個對象中的電子郵件地址。 但是其余的都被忽略了。 因此,在上述數據的情況下,我只會收到hello@example.com,而不會得到info@example.com。

我該如何調整我的foreach

編輯:這里的完整代碼遵循Sendgrid要求您發送的方式。

foreach($entityBody as $value){
$array[0]['email'] = $value->EMAIL;

$data_json = json_encode($array);
$curl = curl_init();
$headers = array();
$headers[] = 'Accept: application/json';
$headers[] = 'Content-Type: application/json';
$headers[] = "Authorization: Bearer XXXX";

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://api.sendgrid.com/v3/contactdb/recipients",

  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
   CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_HTTPHEADER => $headers,
  CURLOPT_POSTFIELDS => $data_json,
));

$response = curl_exec($curl);
$err = curl_error($curl);
if ($err) {

die();
}
else{//run good stuff
$new = json_decode( $response, true );
if($new['persisted_recipients'][0]!=""){

$submit = $new['persisted_recipients'][0];

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://api.sendgrid.com/v3/contactdb/lists/".$listId."/"."recipients/".$submit,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
   CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_HTTPHEADER => $headers,

));

$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
  echo "cURL Error #:" . $err;

die();
}
else{

 echo("success");
die();
}

}  
}
}

第一

使用json_decode ,返回值是一個關聯數組而不是對象。

因此,您的代碼$value->EMAIL無效。

第二

解碼后的JSON將變成這樣:

 [ [ "EMAIL" => "hello@example.com", "GENDER" => "Male" ], [ "EMAIL" => "info@example.com", "GENDER" => "Male" ] ] 

因此,在foreach ($entityBody as $value)$value指向數組而不是值。

因此, $email = $value['EMAIL']也將失敗。

使用double foreach

 $data = '[ { "EMAIL": "hello@example.com", "GENDER": "Male" }, { "EMAIL": "info@example.com", "GENDER": "Male" } ]'; $entityBody = json_decode($data); foreach ($entityBody as $value){ // Remember $value === array foreach ($value as $key => $val){ // You can process your data here if ($key === 'EMAIL') echo "Email: {$val}<br>"; else if ($key === 'GENDER') echo "Gender: {$val}<br>"; } } 

您可以通過將其復制粘貼到PhpFiddle中來運行上面的代碼

編輯

顯然json_decode返回{...}數據格式的對象

因此,您可以使用以下代碼:

 foreach ($entityBody as $value){ $email = isset($value->EMAIL) ? $value->EMAIL : false; $gender = isset($value->GENDER) ? $value->GENDER : false; } 

這使您的代碼完美無缺。

我認為使您的代碼僅運行一次的原因是,在foreach的第二次迭代中,未找到$value->EMAIL值,因此引發錯誤並中斷了執行。

解決方案是首先使用isset()檢查數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM