PHP如何通过动态循环索引读取多维数组实现动态计算
问题说明
需要对动态长度的数组逐一套用评分公式完成计算,替代硬编码固定索引的写法,适配任意长度的输入数据。
初始参考代码
$methods = []; $result = []; // 存储计算结果的数组 foreach($data as $key=>$val){ $methods[]= $val['list_method']; }
遍历得到的数组结构
Array ( [0] => Array ( [rekomendasi] => 1 [select] => 236 [method] => Array ( [0] => Array ( [id] => 0 [rating] => 0 ) [1] => Array ( [id] => 629 [rating] => 443.2 ) ) ) [1] => Array ( [rekomendasi] => 1 [select] => 234 [method] => Array ( [0] => Array ( [id] => 620 [rating] => 343.43 ) [1] => Array ( [id] => 628 [rating] => 345.772 ) ) ) )
原有硬编码实现(存在语法错误)
$result1 = 1 / (1 + (pow( 10 , ( index[0][method][0][rating] - index[0][method][1][rating])/400); $result2 = 1 / (1 + (pow( 10 , ( index[1][method][0][rating] - index[1][method][1][rating])/400);
动态适配实现代码
直接遍历外层数组即可自动适配任意长度的输入数据,同时修正了原代码缺少闭合括号、数组键未加引号、变量名缺失的语法问题:
$results = []; // 遍历外层所有数据项,无论数组长度是2还是更多都可以自动处理 foreach ($data as $idx => $item) { // 取出当前项对应的两个评分值 $ratingFirst = $item['method'][0]['rating']; $ratingSecond = $item['method'][1]['rating']; // 代入公式计算,补全原代码缺失的闭合括号 $results[$idx] = 1 / (1 + pow(10, ($ratingFirst - $ratingSecond) / 400)); }
逻辑说明
- 计算完成后
$results数组会和原外层数组的索引一一对应:$results[0]等价于之前硬编码的$result1,$results[1]等价于$result2,后续新增的数组项也会自动按顺序计算存储。 - 如果后续
method子数组的元素数量超过2个、需要做多组配对计算,只需要在当前循环内再加一层遍历$item['method']的内层循环即可,外层逻辑不需要改动。 - 如果需要对计算结果做后续聚合、筛选,直接在循环内追加对应逻辑即可。
内容的提问来源于stack exchange,提问作者gomarkun
相关产品推荐
相关产品推荐

