stw*_*ite 0 php arrays sorting multidimensional-array
我想做的是按数字对多维数组进行排序,但任何值都等于 0,位于数组的末尾。
该代码适用于使用 0 和个位数进行排序,但当向其中添加不同的数字时,它似乎会中断。
输出需要为:41,42,43,44,45,46,0,0,0
<?php
$array = array(
array(
"position" => 41,
),
array(
"position" => 43,
),
array(
"position" => 42,
),
array(
"position" => 44,
),
array(
"position" => 45,
),
array(
"position" => 0,
),
array(
"position" => 0,
),
array(
"position" => 0,
),
array(
"position" => 46,
),
);
// Sort ascending
usort($array, 'sortByPosition');
// Show result
echo '<pre>';
print_r($array);
function sortByPosition($a, $b) {
return $a['position'] != 0 ? $a['position'] - $b['position'] : $b['position'] - $a['position'];
}
Run Code Online (Sandbox Code Playgroud)
你的比较功能有点不对劲。我会这样做:
function sortByPosition($a, $b) {
if ($a['position'] == $b['position']) return 0;
if ($a['position'] == 0) return 1;
if ($b['position'] == 0) return -1;
return $a['position'] > $b['position'] ? 1 : -1;
}
Run Code Online (Sandbox Code Playgroud)
首先,如果两个位置相同,则返回 0,无论其中一个是否为零。
第二和第三,如果它们中的任何一个为零,则该一个应该在另一个之后排序(因为如果它们都为零,它已经返回)。
第四,两者都不为零,所以只需正常比较值即可。
归档时间: |
|
查看次数: |
1119 次 |
最近记录: |