Lumen @ foreach无效的参数

时间:2017-06-05 09:47:11

标签: php laravel lumen

当我使用此代码时:

 $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()

如何避免此错误?

2 个答案:

答案 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 布尔值。