求一个php二位数组按指定列的排序算法。

$a = array(
            array('userid'=>3,'val'=>9.5),
            array('userid'=>1,'val'=>9),
            array('userid'=>2,'val'=>9.5),
            array('userid'=>5,'val'=>9.5),
            array('userid'=>8,'val'=>9.5)
            
);
或者
$a = array(
            array('userid'=>3,'val'=>9.5),
            array('userid'=>1,'val'=>9.5),
            array('userid'=>2,'val'=>9.5),
            array('userid'=>5,'val'=>9.5),
            array('userid'=>8,'val'=>9.5)
            
);

这两种情况怎么按val排序数组?如果val都相等,不改变userid的次序。

我这样做的:

array_multisort(array_column($arr,'val'),SORT_ASC,$arr);
print_r($arr);

貌似不行,说是按val排序数组,可是遇到val相同的,他还要对userid的值大小进行排序。这种就打乱了排序规则。第二种情况,可能会把userid=1,排到第一位去。

阅读 1.4k
1 个回答

function compareVal($a, $b)
{

return $a['val'] > $b['val'] ? 1 : -1;

}

$a = array(

array('userid' => 3, 'val' => 9.5),
array('userid' => 1, 'val' => 9),
array('userid' => 2, 'val' => 9.5),
array('userid' => 5, 'val' => 9.5),
array('userid' => 8, 'val' => 9.5)

);

usort($a, "compareVal");
print_r($a);

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题