2017-06-05 79 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布尔值。