仅数字排序数组

时间:2011-02-20 08:49:44

标签: php arrays sorting

这是数组

$array = array(
   'list[P] = 1',
   'list[A] = 1',
   'list[F] = 2',
   'list[B] = 1'
);


这是我想要的输出

[0] => list[P] = 1
[1] => list[A] = 1
[2] => list[B] = 1
[3] => list[F] = 2


通知list[P]仍然位于顶部,因为它是第一个值为1.因此只有数字排序

2 个答案:

答案 0 :(得分:5)

尝试查看this documentation

当您尝试对值的特定部分进行排序时,您需要编写自己的比较器,因此唯一可用的方法是usort函数。

uksort函数有两个属性,即您希望用于比较的数组和方法名称。然后编写此方法,该方法将两个值作为参数,并返回true为false,具体取决于它是大于还是小于。

因此,您必须对进入的值进行子串,以仅比较数字。

以下代码示例似乎可以正常工作

function cmp($a, $b)
{
    $a = substr($a, -1);
    $b = substr($b, -1);
    return $a >= $b;
}

$array = array(
   'list[P] = 1',
   'list[A] = 1',
   'list[F] = 2',
   'list[B] = 1'
);

usort($array, "cmp");

var_dump($array);

相同的代码,仅使用PHP的匿名函数:

$array = array(
   'list[P] = 1',
   'list[A] = 1',
   'list[F] = 2',
   'list[B] = 1'
);

usort(
   $array,
   function ($a, $b){
      $a = substr($a, -1);
      $b = substr($b, -1);
      return $a >= $b;
   }
);

var_dump($array);

答案 1 :(得分:0)

如果以相同的顺序保存具有相同值的记录或键是很重要的,那么它们被输入到您正在编写的软件中的排序中,那么您将需要一种被归类为“稳定”的排序算法或方法。这限制了程序员在任何一个国家或地区内可用的排序方法类型,以符合相关规则。