在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
- 第一行的前两行中有
,因此我们不添加10
- 第二行有2+5(7),后面的
无关紧要0
- 第三排与第一排相同
- 第4行仅添加1(在
之前,忽略后面的3)0
[[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。参数/输入类型为“数组”。我现在就纠正这个问题,你能不能先去掉括号,按,
分解,然后在上面迭代?你知道每四分之一都在同一列。