在PHP中解析矩阵并在数组中映射数学函数

在PHP中解析矩阵并在数组中映射数学函数,php,arrays,Php,Arrays,我有一个给定的数组,如下所示: [[0,2,0,1], 0,5,0,0], 1,0,1,3]] foreach($matrix as $k => $v) { // $v = 0,1,1,2 ... foreach($v as $lineValues) { var_dump($lineValues); } } (为了可读性) 这种输入可以像你想象的那样,在长度、高度和数字上有所不同,但在语义上却不一样 我想“映射”一个简单的函数,它做一些基本

我有一个给定的数组,如下所示:

[[0,2,0,1], 
  0,5,0,0], 
  1,0,1,3]]
foreach($matrix as $k => $v) { // $v = 0,1,1,2 ... 
    foreach($v as $lineValues) {
        var_dump($lineValues);
    }
}
(为了可读性)

这种输入可以像你想象的那样,在长度、高度和数字上有所不同,但在语义上却不一样

我想“映射”一个简单的函数,它做一些基本的数学运算,计算如下:

如果列n中有0,则忽略所有其他值(仍然添加之前的值)。否则,将所有值相加

在我上面的例子中,我必须补充:

2+5+1

  • 第一行的前两行中有
    0
    ,因此我们不添加1
  • 第二行有2+5(7),后面的
    0
    无关紧要
  • 第三排与第一排相同
  • 第4行仅添加1(在
    0
    之前,忽略后面的3)
我尝试使用嵌套的foreach语句遍历给定的矩阵,如下所示:

[[0,2,0,1], 
  0,5,0,0], 
  1,0,1,3]]
foreach($matrix as $k => $v) { // $v = 0,1,1,2 ... 
    foreach($v as $lineValues) {
        var_dump($lineValues);
    }
}
这给了我一个输出:


int(0)
int(1)
int(1)
int(2)
int(0)
内部(5)
int(0)
int(0)
int(2)
int(0)
int(3)
int(3)

我考虑计算每行中的元素,然后将结果除以以重建数组,并比较是否有0。 如果有一个0,那么所有进一步的加法都不重要,因此我将跳转到第二个值,递增
$j

$lineValues][$i][$j]   // (1st row, 1st value) 
$lineValues][$i+1][$j] // (2nd row, 1st value) 
...
那对我帮助不大。我还尝试使用
explode(“],”,$v)
对每一行进行
分解,以构建一个更易于阅读的数组,但这也没有奏效


把这些都记在脑后,我想把一个函数映射到这里,但这就是我被卡住的地方。我想(如果我错了,请纠正我),当涉及到性能时,这样一个函数应该是最明智的选择?

可能有更聪明的方法来实现它,但它是有效的

function parse($matrix)
{
    $sum = 0;
    $sum_detail = array();

    $lineLength = count($matrix[0]);
    for($i = 0; $i < $lineLength; $i++)
    {
       foreach($matrix as $line)
       {
           if($line[$i] == 0) break;
           else $sum += $line[$i];
       }
    }

    echo $sum;
}
函数解析($matrix) { $sum=0; $sum_detail=array(); $lineLength=计数($matrix[0]); 对于($i=0;$i<$lineLength;$i++) { foreach($矩阵作为$行) { 如果($line[$i]==0)中断; else$sum+=$line[$i]; } } echo$sum; }

想法是将第一个元素和第1行、第2行、第3行……相加,然后是第二个元素,然后是第三个元素,等等。

可能有更聪明的方法,但它是有效的

function parse($matrix)
{
    $sum = 0;
    $sum_detail = array();

    $lineLength = count($matrix[0]);
    for($i = 0; $i < $lineLength; $i++)
    {
       foreach($matrix as $line)
       {
           if($line[$i] == 0) break;
           else $sum += $line[$i];
       }
    }

    echo $sum;
}
函数解析($matrix) { $sum=0; $sum_detail=array(); $lineLength=计数($matrix[0]); 对于($i=0;$i<$lineLength;$i++) { foreach($矩阵作为$行) { 如果($line[$i]==0)中断; else$sum+=$line[$i]; } } echo$sum; }
其思想是对第1行、第2行、第3行的第一个元素求和,然后是第二个元素、第三个元素,等等。

如果元素为
0
,您可以迭代每个元素并将其列id列入黑名单

PHP代码(请参阅):


如果元素为
0
,则可以迭代每个元素并将其列id列入黑名单

PHP代码(请参阅):


矩阵中的a#是否曾经大于9?@luminosty可能,是的。输入类型是字符串还是数组?你说的是字符串,然后说它是数组。如果它是一个数组,那么给定的输入将导致语法错误。请提供正确的输入及其类型。我的坏,@revo。参数/输入类型为“数组”。我现在就纠正这个问题,你能不能先去掉括号,按
分解,然后在上面迭代?你知道每四分之一都在同一列中。矩阵中的a是否有一次会大于9?@luminosty可能是的。输入类型是string还是array?你说的是字符串,然后说它是数组。如果它是一个数组,那么给定的输入将导致语法错误。请提供正确的输入及其类型。我的坏,@revo。参数/输入类型为“数组”。我现在就纠正这个问题,你能不能先去掉括号,按
分解,然后在上面迭代?你知道每四分之一都在同一列。