PHP将二人数组根据第二维的有个别元素的值实行排序

本文实例讲述了PHP实现数组根据某个单元字段排序操作,重新排列$arr数组的顺序,参考我之前的博客,参考我之前的博客 ,参考我之前的博客 

正文实例陈述了PHP达成数组根据某些单元字段排序操作。分享给大家供大家参谋,具体如下:

例如:

PHP将几人数组按照第二维的某部元素的值进行排序,php二人数组排序

例如:

 1 //原始数组是这样的,希望能够按照第二维中的run_date升序或者降序进行排序:
 2 $arr=array(
 3                 0=>array(
 4                     'run_date'=>'2017-11-21',
 5                     'count'=>'5'
 6                 ),
 7                 1=>array(
 8                     'run_date'=>'2017-11-20',
 9                     'count'=>'10'
10                 ),
11                 2=>array(
12                     'run_date'=>'2017-11-22',
13                     'count'=>'10'
14                 )
15             );
16 //希望得到:
17 $arr=array(
18                 0=>array(
19                     'run_date'=>'2017-11-20',
20                     'count'=>'5'
21                 ),
22                 1=>array(
23                     'run_date'=>'2017-11-21',
24                     'count'=>'10'
25                 ),
26                 2=>array(
27                     'run_date'=>'2017-11-22',
28                     'count'=>'10'
29                 )
30 );

理当如此,用循环遍历是能够化解的,不过依然认为功用有一点点低,这里有别的二个减轻方案,是运用多少个PHP提供的函数:

array_column   、    array_multisort

还是上面的数组:

//先用array_column 多维数组按照纵向(列)取出

$date = array_column($arr, 'run_date');

//上面得到的结果:array(0=>'2017-11-21',1=>'2017-11-20',3=>'2017-11-22')

//再用array_multisort  结合array_column得到的结果对$arr进行排序

array_multisort($date,SORT_ASC,$arr);

//最终的结果:
$arr=array(
                0=>array(
                    'run_date'=>'2017-11-20',
                    'count'=>'5'
                ),
                1=>array(
                    'run_date'=>'2017-11-21',
                    'count'=>'10'
                ),
                2=>array(
                    'run_date'=>'2017-11-22',
                    'count'=>'10'
                )
            );

附:

1、array_column
参谋小编之前的博客 

2、array_multisort array_multisort()
函数对八个数组或多维数组开始展览排序,可以用来一次对两个PHP二维数组排序进行排序,或然根据某一维或多维对多维数组开始展览排序

参数中的数组被当成二个表的列并以行来拓展排序 – 那类似 SQL 的 OCRUISERDERAV4 BY
子句的法力。第几个数组是要排序的首要数组。数组中的行(值)相比较为同一的话,就能够依据下二个输入数组中相应值的尺寸实行排序,由此及彼。

率先个参数是数组,随后的每二个参数也许是数组,也或许是上面包车型地铁排序依次标记(排序标记用于转移默许的排列顺序)之一:

SORT_ASC – 默许,按升序排列。(A-Z)
SORT_DESC – 按降序排列。(Z-A)
随着能够钦赐排序的品种:

SORT_REGULA奔驰M级 – 默许。将每一种按平常顺序排列。
SORT_NUMESportageIC – 将每一样按数字顺序排列。
SORT_ST宝马7系ING – 将每一样按字母顺序排列。
array_multisort(array1,sorting order,sorting type,array2,array3…)
array1 : 必需。规定输入的数组。

sorting order : 可选。规定排列顺序。或然的值是 SORT_ASC 和 SORT_DESC。

sorting type :
可选。规定排序类型。或者的值是SORT_REGULAR、SORT_NUMERIC和SORT_STRING。

array2 : 可选。规定输入的数组。

array3 : 可选。规定输入的数组。

讲解:字符串键新秀被封存,但是数字键将被再一次索引,从 0 初步,并以 1
递增。

疏解:您能够在每一个数组后装置排序依次和排序类型。若无安装,每一个数组参数会接纳默许值。

PHP二维数组排序是比照第贰个数组进行排序,而且调动前面包车型地铁次第。像这么的数组:

array( 'id' => array(1,3,2), 'data'=>array('a','c','b'))

假诺依据id举行多维排序,就足以了。但是洋洋时候,大家组织出的数组是如此的:

array( array('id'=>1,'data'=>'a'), array('id'=>3,'data'=>'c'), array('id'=>2,'data'=>'b') );

PHP二维数组排序的成分是按行排列的,供给按其中的一列举办排序。PHP好像也没提供类似矩阵转置的函数,所以不可能直接选用array_multisort实行多维排序。但是只须求先把排序的列收抽出来,作为第七个参数字传送给array_multisort即可

例如: 1 //
原始数组是那样的,希望能够根据第二维中的run_date升序或…

新浦京娱乐,例如:

如题,给出一个PHP数组,数组结构如下:

 1 //原始数组是这样的,希望能够按照第二维中的run_date升序或者降序进行排序: 2 $arr=array( 3                 0=>array( 4                     'run_date'=>'2017-11-21', 5                     'count'=>'5' 6                 ), 7                 1=>array( 8                     'run_date'=>'2017-11-20', 9                     'count'=>'10'10                 ),11                 2=>array(12                     'run_date'=>'2017-11-22',13                     'count'=>'10'14                 )15             );16 //希望得到:17 $arr=array(18                 0=>array(19                     'run_date'=>'2017-11-20',20                     'count'=>'5'21                 ),22                 1=>array(23                     'run_date'=>'2017-11-21',24                     'count'=>'10'25                 ),26                 2=>array(27                     'run_date'=>'2017-11-22',28                     'count'=>'10'29                 )30 );
 1 //原始数组是这样的,希望能够按照第二维中的run_date升序或者降序进行排序:
 2 $arr=array(
 3                 0=>array(
 4                     'run_date'=>'2017-11-21',
 5                     'count'=>'5'
 6                 ),
 7                 1=>array(
 8                     'run_date'=>'2017-11-20',
 9                     'count'=>'10'
10                 ),
11                 2=>array(
12                     'run_date'=>'2017-11-22',
13                     'count'=>'10'
14                 )
15             );
16 //希望得到:
17 $arr=array(
18                 0=>array(
19                     'run_date'=>'2017-11-20',
20                     'count'=>'5'
21                 ),
22                 1=>array(
23                     'run_date'=>'2017-11-21',
24                     'count'=>'10'
25                 ),
26                 2=>array(
27                     'run_date'=>'2017-11-22',
28                     'count'=>'10'
29                 )
30 );
$arr = array(
  array(
    'name'=>'sadas',
    'norder'=>1
  ),
  array(
    'name'=>'sadas',
    'norder'=>11
  ),
  array(
    'name'=>'sadas',
    'norder'=>123
  ),
  array(
    'name'=>'sadas',
    'norder'=>11
  )
);

本来,用循环遍历是足以减轻的,不过仍旧感到效能有一点低,这里有别的贰个化解方案,是应用四个PHP提供的函数:

自然,用循环遍历是足以缓慢解决的,可是依旧以为作用有一点低,这里有别的三个消除方案,是使用五个PHP提供的函数:

亟待是急需听从norder从大到小的逐个,重新排列$arr数组的逐个。

array_column   、    array_multisort

还是上面的数组:

//先用array_column 多维数组按照纵向取出$date = array_column($arr, 'run_date');//上面得到的结果:array(0=>'2017-11-21',1=>'2017-11-20',3=>'2017-11-22')//再用array_multisort  结合array_column得到的结果对$arr进行排序array_multisort($date,SORT_ASC,$arr);//最终的结果:$arr=array(                0=>array(                    'run_date'=>'2017-11-20',                    'count'=>'5'                ),                1=>array(                    'run_date'=>'2017-11-21',                    'count'=>'10'                ),                2=>array(                    'run_date'=>'2017-11-22',                    'count'=>'10'                )            );
array_column   、    array_multisort

还是上面的数组:

//先用array_column 多维数组按照纵向(列)取出

$date = array_column($arr, 'run_date');

//上面得到的结果:array(0=>'2017-11-21',1=>'2017-11-20',3=>'2017-11-22')

//再用array_multisort  结合array_column得到的结果对$arr进行排序

array_multisort($date,SORT_ASC,$arr);

//最终的结果:
$arr=array(
                0=>array(
                    'run_date'=>'2017-11-20',
                    'count'=>'5'
                ),
                1=>array(
                    'run_date'=>'2017-11-21',
                    'count'=>'10'
                ),
                2=>array(
                    'run_date'=>'2017-11-22',
                    'count'=>'10'
                )
            );

能够利用array_multisort函数来援救排序:

附:

附:

function p($arr){
  echo "<pre>";
  print_r($arr);
  echo "</pre>";
}
$arr = array(
  array(
    'name'=>'sadas',
    'norder'=>1
  ),
  array(
    'name'=>'sadas',
    'norder'=>11
  ),
  array(
    'name'=>'sadas',
    'norder'=>123
  ),
  array(
    'name'=>'sadas',
    'norder'=>11
  )
);
$flag = array();
foreach($arr as $v){
  $flag[] = $v['norder'];
}
array_multisort($flag, SORT_DESC, $arr);
p($arr);

1、array_column
参考笔者在此以前的博客

1、array_columnxpj葡京真钱官网,
参照他事他说加以考察笔者后边的博客