仅数字排序数组

Zeb*_*bra 2 php arrays sorting

这是阵列

$array = array(
   'list[P] = 1',
   'list[A] = 1',
   'list[F] = 2',
   'list[B] = 1'
);
Run Code Online (Sandbox Code Playgroud)


这是我想要的输出

[0] => list[P] = 1
[1] => list[A] = 1
[2] => list[B] = 1
[3] => list[F] = 2
Run Code Online (Sandbox Code Playgroud)


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

Cod*_*nci 5

试着看看这个文档.

当您尝试对值的特定部分进行排序时,您需要编写自己的比较器,因此唯一可用的方法是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);
Run Code Online (Sandbox Code Playgroud)

相同的代码,仅使用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);
Run Code Online (Sandbox Code Playgroud)