bool usort ( array &$array , callable $value_compare_func )

本函数将用用户自定义的比较函数对一个数组中的值进行排序。 如果要排序的数组需要用一种不寻常的标准进行排序,那么应该使用此函数。

我们都知道对数组排序常用的sort,rsort,asort,arsort,ksort,krsort等,但是如果数组中保存的是对象,怎么按照对象中的元素排序呢?

首先我们生成一个对象数组

$arr1 = ['a' => 'peter', 'c' => 'henry'];
$arr2 = ['a' => 'henry', 'c' => 'peter'];
$arr1 = (object)$arr1;
$arr2 = (object)$arr2;
$arr3 = [$arr1, $arr2];

输入对象数组格式如下:

array (size=2)
  0 => 
    object(stdClass)[1]
      public 'a' => string 'peter' (length=5)
      public 'c' => string 'henry' (length=5)
  1 => 
    object(stdClass)[2]
      public 'a' => string 'henry' (length=5)
      public 'c' => string 'peter' (length=5)
      

使用sort排序查看结果:

sort($arr3);
var_dump($arr3);die;

输出结果如下:

array (size=2)
  0 => 
    object(stdClass)[2]
      public 'a' => string 'henry' (length=5)
      public 'c' => string 'peter' (length=5)
  1 => 
    object(stdClass)[1]
      public 'a' => string 'peter' (length=5)
      public 'c' => string 'henry' (length=5)

可见sort对于对象数组,按照第一个元素的值进行正序排列。

现在要求按照第二个key值c来排序,就需要usort出场了。

//排序函数

function my_sort($a,$b)
{
    return strcmp($a->c,$b->c);
}

按照c的值升序排列

usort($arr3,'my_sort');
var_dump($arr3);

array (size=2)
  0 => 
    object(stdClass)[1]
      public 'a' => string 'peter' (length=5)
      public 'c' => string 'henry' (length=5)
  1 => 
    object(stdClass)[2]
      public 'a' => string 'henry' (length=5)
      public 'c' => string 'peter' (length=5)

Donne
694 声望25 粉丝

知其然,知其所以然。


引用和评论

0 条评论