接受JSON编码数组的PHP函数

时间:2016-07-05 22:40:39

标签: php arrays json sorting

我正在解决一些数学矩阵问题,我有理由编写接受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数组,但是如何使用坐标作为索引找到的值来编写这样的数组。如你所见,我陷入了问题的开始!

1 个答案:

答案 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);