python - 从Python到PHP的for循环转换问题

标签 python php for-loop type-conversion

我尝试转换以下Python函数:

def Sous(dist,d):

    l = len(dist)
    L = [[]]
    for i in range(l):
        K = []
        s = sum(dist[i+1:])
        for p in L:
            q = sum(p)
            m = max(d - q - s, 0)
            M = min(dist[i], d - q)
            for j in range(m, M+1):
                K.append(p + [j])
        L = K
    return L

转换为 PHP 函数:

function sous($dist, $d){
    $l = count($dist);
    $L = [[]];
    foreach(range(0,$l) as $i){
        $K = [];
        $s = array_sum(array_slice($dist, $i+1));
        foreach($L as $p){
            $q = array_sum($p);
            $m = max($d-$q-$s, 0);
            $M = min($dist[$i], $d-$q);
            foreach(range($m, $M+1) as $j){
                $K[] = $p+$j;
            }
        }
        $L = $K;
    }
    return $L;
}

当我测试它时:

var_dump(sous([3,2,2,1,1,0], 2));

我收到错误:

Uncaught Error: Unsupported operand types

对于线路

$K[] = $p+$j;

我不知道如何解决这个问题,你有什么想法吗?

最佳答案

Python 的 range(n) 返回从 0n-1 的数组,而 PHP 的 range($n, $m ) 返回从 $n$m 的数组,因此必须使用 range(0, $l -1)那里。

此外,K.append(p+[j]) 应转换为 $K[] = $p+[$j];,因为 $j 不是数组。

以下功能应该可以工作:

function sous($dist, $d){
    $l = count($dist);
    $L = [[]];
    foreach(range(0,$l - 1) as $i){
        $K = [];
        $s = array_sum(array_slice($dist, $i+1));
        foreach($L as $p){
            $q = array_sum($p);
            $m = max($d-$q-$s, 0);
            $M = min($dist[$i], $d-$q);
            foreach(range($m, $M+1) as $j){
                $K[] = $p+[$j];
            }
        }
        $L = $K;
    }
    return $L;
}

关于python - 从Python到PHP的for循环转换问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65748209/

相关文章:

python - Python编码风格中的空格

python 3.1 与 pydev

php - JavaScript 仅用于验证已检查的提交

java - 如何制作一个 for 循环来在 javaFx 中显示 8 个 TextFields

java - 迭代二维数组后仅打印一次消息

python - 如何最小化 3 线性拟合的卡方

python - 从总值最高的 2 个数组中从 N 个数字中选择 k 个

php - Yii2:检查数据库中是否存在 ActiveRecord 模型

php - 在 zend framework 2 中启用 BjyProfiler 模块

python-3.x - 对于每一行 "for loop"无法在我的脚本中实现