当我使用此代码时:
$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 :(得分: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;
}
}
}
Check是一个$contacts
数组,然后循环它(因为它可以为null或其他)
答案 1 :(得分:0)
您应该在$contacts
之前检查foreach
值:
$contacts = json_decode($request->get('contacts'), true);
$contacts = is_array($contacts) ? $contacts : [];
或者就在foreach
foreach (($contacts ?: []) as $contact)
如果您使用的是PHP 7.0,请使用null coalesce operator
foreach (($contacts ?? []) as $contact)
由于json_decode
将始终返回null
,因此无法解码该值,因为JSON结构无效或者编码数据比递归限制更深。请确保$request->get('contacts')
永远不会返回 ANY 布尔值。