美文网首页
Indirect modification of overloa

Indirect modification of overloa

作者: 富贵山庄王动 | 来源:发表于2017-08-18 05:44 被阅读0次

    解决方案: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 overloa

          本文链接:https://www.haomeiwen.com/subject/hwsorxtx.html