>我需要遍历二维数组,访问其列式数据,并对平面数组中的相应值执行除法。
平面数组:
$array1 = [
'maxwater' => 1,
'maxfodder' => 2,
'maxmob' => 3,
'maxalt' => 4,
'maxhum' => 5,
'mintemp' => 6
];
二维数组:
$array2 = [
[2, 3, 4, 4, 1, 2],
[3, 2, 1, 4, 1, 3],
[4, 1, 2, 3, 1, 3],
[3, 4, 2, 1, 1, 3],
[1, 2, 2, 2, 3, 3]
];
我在这里要做的只是将$array2
的每一列除以$array1
中的相应数字。
例如
$array1
(maxwater
( 中的第一个值为1
。 这个数字应该用来除以$array2
第一列中的每个值(2
、3
、4
、3
、1
(。- 那么
$array2
(maxfodder
(中的下一个值是2
。$array2
中的第二列值(3
、2
、1
、4
、2
(应除以2
。 - 应对
$array2
中的所有列重复此过程。
我已经尝试使用此代码,但它生成了一个错误:
注意:未定义的偏移量:0 在 C:''xampp''htdocs''Livestockmapping''dsssawprocess.php 在第 42
行警告:在第 42 行的 C:''xampp''htdocs''Livestockmapping''dsssawprocess.php 中除以零0
法典:
$yaxis = sizeof($array2);
$xaxis = max(array_map('count', $array2));
echo $xaxis;
echo $yaxis;
//normalization
for($i=0; $i < $xaxis; $i++)
{
for($j=0; $j < $yaxis; $j++)
{
$c1norm = round($array2[$i][$j]/$array1[$j]);
echo $c1norm;
}
}
有人可以帮助我找到正确的方法来做到这一点吗?
编辑:我的第二次编码尝试:
foreach($array1 as $v){
echo (array_sum(array_column($array2, $v - 1)) / $v) . "<br />";
}
它提供了如下结果:
Array
(
[0] => 13
[1] => 6
[2] => 3.6666666666667
[3] => 3.5
[4] => 1.4
[5] => 2.3333333333333
)
但我想要的是将每个列值划分为$array2
,如下所示:
2 / 1 = 2
3 / 1 = 3
4 / 1 = 4
3 / 1 = 3
1 / 1 = 1
3 / 2 = 2
2 / 2 = 1
1 / 2 = 1
4 / 2 = 2
2 / 2 = 1
4 / 3 = 1
1 / 3 = 0
2 / 3 = 1
2 / 3 = 1
2 / 3 = 1
。等等。
现在,您正在根据$array2
矩阵划分元素。
包括$array1
(每个(的for
循环,并将其应用于每列$array2
$array2[$j][$i]
^ column first
例:
// $array1 = array_values($array1); numeric index conversion
$c = count($array1);
$xaxis = sizeof($array2);
$yaxis = max(array_map('count', $array2));
// normalization
for($i = 0; $i < $c; $i++) {
for($j = 0; $j < ($yaxis - 1); $j++) {
$c1norm = round($array2[$j][$i] / $array1[$i]);
echo $c1norm;
}
}
演示
$indexLevelOne = count($array2);
$indexLevelTwo = count($array2[0]);
// normalization
$k=0;
foreach($array1 as $v){
for($j=0; $j<$indexLevelTwo; $j++){
if($j != $k) continue;
for($i=0; $i<$indexLevelOne; $i++){
$c1norm = round($array2[$i][$j] / $v);
echo $array2[$i][$j] . " / " . $v . " = " . $c1norm, "'n";
}
echo "'n'n";
}
echo "'n'n";
$k++;
}
我将演示一种现代的函数式技术,利用嵌套array_map()
调用来同步迭代两个数组并转置多维数组。
通过在将第二个数组传递到array_map()
然后再次使用展开运算符接收数据时使用展开运算符,会发生"转置"——换句话说,一列数据变成了一行数据。
代码:(演示(
var_export(
array_map(
fn($divisor, ...$column) => array_map(
fn($v) => round($v / $divisor),
$column
),
array_values($array1),
...$array2
)
);