2017-06-05 83 views
0

當我使用此代碼:流明@的foreach無效參數

$body=$request->all(); 
     $contacts = json_decode($request->get('contacts'), true); 
     $user_contacts = array_flatten($this->_model->scan_contacts($this->_user->user_id, $contacts)); 
     $nonsync_contacts = array(); 
     foreach ($contacts as $contact) { 

      if (!in_array($contact["mobile"], $user_contacts)) { 
       $nonsync_contacts[] = $contact; 
      } 
     } 

我收到此錯誤信息:

ErrorException in Arr.php line 493: 
Invalid argument supplied for foreach() 

如何避免這個錯誤?

+0

顯示此print_r的輸出($ contacts) – Exprator

+0

我確定$ contacts不是數組或它可能爲空 –

回答

0
$body=$request->all(); 
$contacts = json_decode($request->get('contacts'), true); 
$user_contacts = array_flatten($this->_model->scan_contacts($this->_user->user_id, $contacts)); 
$nonsync_contacts = array(); 
if(is_array($contacts)) { 
    foreach ($contacts as $contact) { 

     if (!in_array($contact["mobile"], $user_contacts)) { 
      $nonsync_contacts[] = $contact; 
     } 
    } 
} 

檢查是$contacts陣列和循環後(因爲它可以爲空或別的東西)

+0

$ print_r()中的contact爲空 – falak

0

你應該之前foreach -ing檢查$contacts值:

$contacts = json_decode($request->get('contacts'), true); 
$contacts = is_array($contacts) ? $contacts : []; 

或者就在之前foreach

foreach (($contacts ?: []) as $contact) 

如果你使用PHP 7.0,使用空COALESCE操作

foreach (($contacts ?? []) as $contact) 

由於json_decode總是返回null的價值不能被解碼由於無效的JSON結構或他編碼後的數據比遞歸限制更深。請確保您的$request->get('contacts')永不返回ANY布爾值。