Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP+;Laravel:间接修改Lightlight\Support\Collection的重载元素无效_Php_Laravel_Collections - Fatal编程技术网

PHP+;Laravel:间接修改Lightlight\Support\Collection的重载元素无效

PHP+;Laravel:间接修改Lightlight\Support\Collection的重载元素无效,php,laravel,collections,Php,Laravel,Collections,我试图循环遍历一些数据,如果键值对与同一数组中的特定条件匹配,我需要对所有数字字段执行计算 然而,当我试图达到我需要的水平时,我得到了一个错误: 间接修改light\Support\Collection的重载元素无效 以下是我掌握的数据: { "CLIENT-NAME-1": { "returns": [ { "valueType": "absol

我试图循环遍历一些数据,如果键值对与同一数组中的特定条件匹配,我需要对所有数字字段执行计算

然而,当我试图达到我需要的水平时,我得到了一个错误:

间接修改light\Support\Collection的重载元素无效

以下是我掌握的数据:

{
    "CLIENT-NAME-1": {
        "returns": [
            {
                "valueType": "absolute return",
                "priceDate": "2021-05-31",
                "currency": "JPY",
                "quarterTDReturn": 260,
                "sinceInception": 0.58,
                "currencyType": "local",
                "returnMethod": "time-weighted",
                "grossOrNet": "gross"
            }
        ],
        "gainLoss": [
            {
                "valueType": "gain loss",
                "methodology": "Cumulative",
                "currency": "JPY",
                "fiscalYearToDate": 54584758,
                "currencyType": "local",
                "type": "total"
            }
        ]
    },
    "CLIENT-NAME-2": {
        "returns": [
            {
                "valueType": "absolute return",
                "priceDate": "2021-05-31",
                "currency": "JPY",
                "quarterTDReturn": 2.6e+94,
                "currencyType": "local",
                "returnMethod": "time-weighted",
                "grossOrNet": "gross"
            },
            {
                "valueType": "absolute return",
                "priceDate": "2020-09-30",
                "methodology": "IRR; Gross; Valuated",
                "currency": "USD",
                "sinceInception": 0.026000000000000002,
                "currencyType": "base",
                "returnMethod": "IRR",
                "grossOrNet": "gross",
                "authenticity": "valuated"
            },
            {
                "valueType": "absolute return",
                "priceDate": "2020-09-30",
                "methodology": "IRR; Net; Valuated",
                "currency": "USD",
                "sinceInception": 0.026000000000000002,
                "currencyType": "base",
                "returnMethod": "IRR",
                "grossOrNet": "net",
                "authenticity": "valuated"
            }
        ]
    }
}
以下是我在遇到上述错误时所做的尝试:

foreach ($this->data as $clientReference => $dataGroupsArrays) {
    foreach ($dataGroupsArrays['returns'] as $arrKey => $keyValuePair) {
        if (($keyValuePair['valueType'] == "absolute return") && ($keyValuePair['returnMethod'] == "time-weighted")) {
            foreach ($keyValuePair as $key => $value) {
                if(is_numeric($value)) {
                    $this->data[$clientReference][$arrKey][$key] = $value * 100;
                }
            }
        }
    }
}
我看到了一个类似的问题:这表明这是因为它是一个集合,所以我应该映射数据

所以我试着:

$this->data = $this->data->map(function ($clientReference, $dataGroupsArrays) {
    $dataGroupsArrays['returns'] = $dataGroupsArrays['returns']->map(function ($arrKey, $keyValuePair) {
        if (($keyValuePair['valueType'] == "absolute return") && ($keyValuePair['returnMethod'] == "time-weighted")) {
            
            $keyValuePair = $keyValuePair->map(function($key, $value) {
                if(is_numeric($value)) {
                    return $value * 100;
                }
            });
            
        
        }
    }
});
但是我得到了一个错误:

非法字符串偏移量“返回”

如果
['valueType']==“绝对返回”
['returnMethod']==“时间加权”
将该数组/对象中的所有数值乘以100,我该如何循环使用这些数据呢?

希望能有所帮助:

  $clients = $this->data();
    foreach ($clients as $cIndex => $client) {
        foreach ($client['returns'] as $rIndex => $return) {
            if ($return['valueType'] === "absolute return" &&  $return["returnMethod"] === "time-weighted") {
                foreach ($return as $key => $value) {
                    if (is_numeric($value)) {
                        $return[$key] = $value * 100;
                    }
                }
                $client['returns'][$rIndex] = $return;
            }
        }
        $clients[$cIndex] = $client;
    }
如果您喜欢使用地图:

  $clients = collect($this->data())
        ->map(function ($client) {
            $client["returns"] = collect($client["returns"])
                ->map(function ($return) {
                    if ($return["valueType"] === "absolute return" && $return["returnMethod"] === "time-weighted") {
                        $return = collect($return)
                            ->map(function ($value) {
                                return is_numeric($value) ? $value * 100 : $value;
                            })->toArray();
                    }
                    return $return;
                })->toArray();
            return $client;
        })->toArray();

祝你好运,我的朋友。