python函数和php转换的不同输出

python函数和php转换的不同输出,python,php,output,data-conversion,Python,Php,Output,Data Conversion,我尝试转换以下python函数 def Sous(dist,d): l=长度(距离) L=[]] 对于范围(l)中的i: K=[] s=总和(距离[i+1:] 对于L中的p: q=总和(p) m=最大值(d-q-s,0) M=min(距离[i],d-q) 对于范围(m,m+1)内的j: K.append(p+[j]) L=K 返回L 印刷品(苏([3,2,1,0],2)) 转换为PHP函数 函数sou($dist,$d){ $l=计数($dist); $L=[[]]; foreach(范围(0

我尝试转换以下python函数

def Sous(dist,d):
l=长度(距离)
L=[]]
对于范围(l)中的i:
K=[]
s=总和(距离[i+1:]
对于L中的p:
q=总和(p)
m=最大值(d-q-s,0)
M=min(距离[i],d-q)
对于范围(m,m+1)内的j:
K.append(p+[j])
L=K
返回L
印刷品(苏([3,2,1,0],2))
转换为PHP函数

函数sou($dist,$d){
$l=计数($dist);
$L=[[]];
foreach(范围(0,$l-1)为$i){
$K=[];
$s=数组和(数组切片($dist,$i+1));
foreach($L为$p){
$q=数组和($p);
$m=最大值($d-$q-$s,0);
$M=最小值($dist[$i],$d-$q);
foreach(范围($m,$m+1)为$j){
$K[]=$p+[$j];
}
}
$L=$K;
}
返回$L;
}
印刷品(苏([3,2,1,0],2));
但当我得到python函数的正确输出时:

[[0,1,1,0]、[0,2,0,0]、[1,0,1,0]、[1,1,0,0]、[2,0,0]]
我得到了一个错误的PHP转换输出

数组
(
[0]=>阵列
(
[0] => 0
)
[1] =>阵列
(
[0] => 0
)
[2] =>阵列
(
[0] => 0
)
[3] =>阵列
(
[0] => 0
)
[4] =>阵列
(
[0] => 0
)
...
我找不到PHP转换中的问题在哪里,因为我并不真正理解我试图转换的代码。
你知道我哪里做错了吗?

问题在于以下Python语句的翻译:

K.append(p+[j])
p+[j]
将从获取列表
p
和附加元素
j
创建一个新列表,保持原始列表不变。因此,等效的PHP翻译为:

$p_copy = $p;
$p_copy[] = $j;
$K[] = $p_copy;
我还必须替换:

foreach(range($m, $M+1) as $j){
与:

综上所述:

<?php

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) as $j){
                $p_copy = $p;
                $p_copy[] = $j;
                $K[] = $p_copy;
            }
        }
        $L = $K;
    }
    return $L;
}

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

问题在于以下Python语句的翻译:

K.append(p+[j])
p+[j]
将从获取列表
p
和附加元素
j
创建一个新列表,保持原始列表不变。因此,等效的PHP翻译为:

$p_copy = $p;
$p_copy[] = $j;
$K[] = $p_copy;
我还必须替换:

foreach(range($m, $M+1) as $j){
与:

综上所述:

<?php

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) as $j){
                $p_copy = $p;
                $p_copy[] = $j;
                $K[] = $p_copy;
            }
        }
        $L = $K;
    }
    return $L;
}

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

变量名长度没有限制,您可以使用多个字符。变量名长度没有限制,您可以使用多个字符。非常感谢您,您真的是我的救世主!!再次感谢!我还忘了注释我所做的另一项更改。请参阅更新的说明(代码保持不变)。非常感谢你,你真的是我的救世主!!再次感谢!我还忘了注释我所做的另一个更改。请参阅更新的说明(代码保持不变)。