我正在解决一些数学矩阵问题,我有理由编写接受JSON编码数组的PHP函数,并且:
1)按升序对给定矩阵(2D数组)的第一行进行排序。在排序过程中,其他行应该像它们粘贴到第一行一样移动(在排序第一行时移动所有列)。
2)找出排序的2D数组中除第一行之外的最大数字。然后计算最大数字坐标的总和(坐标从[1,1]开始)。
- 第一行仅用于排序,不用于计算
- 如果最大数字存在于多行中,那么这个最大数字的所有坐标都必须加到总和中)
矩阵(2D阵列)的示例是:
6 3 9
9 1 6
4 7 9
该示例的解决方案如下:
6 3 9 => 3 6 9 => 3 6 9
9 1 6 => 1 9 6 => 1 9 6 => 9(2,2)和9(3,3)=> (2 + 2)+(3 + 3)=> 10
4 7 9 => 7 4 9 => 7 4 9
但是,目前,我是PHP的初学者,这样的代码超出了我的技能,所以我需要一些帮助。
第一部分是PHP数组,但是如何使用坐标作为索引找到的值来编写这样的数组。如你所见,我陷入了问题的开始!
答案 0 :(得分:1)
要将第一行的排序映射到其余行,您可以先使用asort
对其进行独立排序,以保持关键关联:
$input = [ // or for PHP < 5.4: $input = array(
[6,3,9], // array(6,3,9),
[9,1,6], // array(9,1,6),
[4,7,9] // array(4,7,9)
]; // );
$sort_keys = $input[0];
asort($sort_keys);
然后use
array_map
中的排序数组返回输入数组的排序版本。
$sorted = array_map(function($row) use ($sort_keys){
foreach ($sort_keys as $key => $value) {
$result[] = $row[$key];
}
return $result;
}, $input);