PHP排序问题,看图

某公司面试题,想了半个小时没思路。

$arr = [
    [4, 5, 9, 4, 1],
    [11, 14, 9, 6, 20],
    [21, 44, 90, 16, 21],
    [16, 34, 99, 600, 230],
    [121, 18, 89, 60, 33]
]

对以上数组排序,数组 $arr[0][0] 为最大值,$arr[4][4] 为第二大,$arr[0][1] 为第三大,以此类推,$arr[2][2] 为最小值

4、33、5、60~~~90

006tNbRwly1fwx7gs4yxmj31hc0u0kjc.jpg

阅读 2.3k
3 个回答
$arr = [
    [4, 5, 9, 4, 1],
    [11, 14, 9, 6, 20],
    [21, 44, 90, 16, 21],
    [16, 34, 99, 600, 230],
    [121, 18, 89, 60, 33]
]

$arr1 = [];
foreach ($arr as $v) {
    $arr1 = array_merge($arr1, $v);
}

rsort($arr1);

$arrA = [];
$arrB = [];

foreach ($arr1 as $key => $value) {
    if ($key % 2 == 0) {
        $arrA[] = $value;
    } else {
        array_unshift($arrB, $value);
    }
}

$arrC = array_merge($arrA, $arrB);

return array_chunk($arrC, 5);
$arr = [
    [4, 5, 9, 4, 1],
    [11, 14, 9, 6, 20],
    [21, 44, 90, 16, 21],
    [16, 34, 99, 600, 230],
    [121, 18, 89, 60, 33]
];

foreach ($arr as &$v) {
    rsort($v);
    $l = $r = [];
    foreach ($v as $key => $value) {
        if ($key & 1) {
            array_unshift($r, $value);
        } else {
            $l[] = $value;
        }
    }
    $v = array_merge($l, $r);
}
var_dump($arr);

在@Masterton的基础上做了些许修改

不知道是不是这样

$arr = [
    [4, 5, 9, 4, 1],
    [11, 14, 9, 6, 20],
    [21, 44, 90, 16, 21],
    [16, 34, 99, 600, 230],
    [121, 18, 89, 60, 33]
];
$result = array_reduce($arr, 'array_merge', array());
$count=count($result);
for($i=0;$i<$count;$i++){
    if($i%2==0){
        $arrs[]+=$result[$i/2];
    }else{
        $arrs[]+=$result[$count-1-floor($i/2)];
    }
}
print_r($arrs);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题