Indirect modification of overloaded element of ***** has no effect

解决方案:https://stackoverflow.com/questions/20053269/indirect-modification-of-overloaded-element-of-splfixedarray-has-no-effect

错误的写法

其中job是laravel的Model对象,$service_options是collection对象转成数组

$len = count($service_options);
        for ($i=0;$i<$len;$i++){
            $service_option = $service_options[$i];
            $key = implode("_",[
                "list",
//                $service_option["name"],
                $service_option["id"],
                $service_option["ooo"],
            ]);
            if (!isset($options[$key])){
                $job[$key]= [];
            }
            array_push($job[$key],$service_option);//$job[$key][]=$service_option
        }

正确的写法

        $len = count($service_options);
        $options = [];
        for ($i=0;$i<$len;$i++){
            $service_option = $service_options[$i];
            $key = implode("_",[
                "list",
//                $service_option["name"],
                $service_option["id"],
                $service_option["ooo"],
            ]);
            if (!isset($options[$key])){
                $options[$key]= [];
            }
            array_push($options[$key],$service_option);

            $job[$key] = $options[$key];
        }

原因就是实现了ArrayAccess接口的对象对于数组的访问是受限的,比如这里接口只实现了一维数组,所以直接赋值$job[$key][]就不行了,所以就需要一个中间变量周转一下。详情参见预定义接口ArrayAccesshttp://php.net/manual/zh/class.arrayaccess.php。

可能我说的不对,反正就是这个接口的问题。

你可能感兴趣的:(Indirect modification of overloaded element of ***** has no effect)