作为程序员一定要保持良好的睡眠,才能好编程

php 相关sort使用说明

发布时间:2018-06-10

<?php

 $arr=[
 	[
 		'id'=>4
 	],
 	[
 		'id'=>5
 	],
 	[
 		'id'=>16
 	],
 	[
	 		'id'=>1
 	],
 	[
 		'id'=>9
 	],
 	[
 		'id'=>12
 	]
 ];

 function bp($a,$b){
	if($a['id']==$b['id']){
		return 0;
	}else if($a['id']<$b['id']){
		return -1;
	}else if($a['id']>$b['id']){
		return 1;
	}
 }

 //对上面的数组进行排序

 //uasort($arr, 'bp');  //对数组中的数据进行排序,并保持索引关系

 usort($arr,'bp'); //对数组中数据进行排序,重新建立索引关系



 echo "<pre>";
 print_r($arr);
 echo "</pre>";


/*
	


  以下三种方式都是用户自定义排序
  uasort 按值进行排序 保持索引
  usort 按值进行排序,不保持索引
  uksort 按key进行排序,这里没有说到什么 保持索引,因为 key本身就是索引了。

  sort() 函数用于对数组单元从低到高进行排序。
  rsort() 函数用于对数组单元从高到低进行排序。
  asort() 函数用于对数组单元从低到高进行排序并保持索引关系。
  arsort() 函数用于对数组单元从高到低进行排序并保持索引关系。
  ksort() 函数用于对数组单元按照键名从低到高进行排序。
  krsort() 函数用于对数组单元按照键名从高到低进行排序。
  






  array_slice  从数组中获取一段
**/








function array_orderby()
{
    $args = func_get_args();
    $data = array_shift($args);
    foreach ($args as $n => $field) {
        if (is_string($field)) {
            $tmp = array();
            foreach ($data as $key => $row)
                $tmp[$key] = $row[$field];
            $args[$n] = $tmp;
            }
    }
    $args[] = &$data;
    call_user_func_array('array_multisort', $args);
    return array_pop($args);
}

$data[] = array('volume' => 67, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 1);
$data[] = array('volume' => 85, 'edition' => 6);
$data[] = array('volume' => 98, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 6);
$data[] = array('volume' => 67, 'edition' => 7);

// Pass the array, followed by the column names and sort flags
$sorted = array_orderby($data, 'volume', SORT_DESC, 'edition', SORT_ASC);


print_r($sorted);



$a=array(array('1'),array('2'),array('3'),array('4'));
$b=array('a'=>array('2'),array('4'),array('6'),array('8'),array('9'));
$c=$a+$b; //按照索引关系 ,进行组装
//$c=array_merge($a,$b);
//$c=array_map("unserialize", array_unique(array_map("serialize", $c)));
print_r($c);




//保持key索引

$Default[0]='Select Something please';

$Data[147]='potato';
$Data[258]='banana';
$Data[54]='tomato';

$A=array_merge($Default,$Data);

$B=ArrayMergeKeepKeys($Default,$Data);

echo '<pre>';
print_r($A);
print_r($B);
echo '</pre>';

Function ArrayMergeKeepKeys() {
      $arg_list = func_get_args();
      foreach((array)$arg_list as $arg){
          foreach((array)$arg as $K => $V){
              $Zoo[$K]=$V;
          }
      }
    return $Zoo;
}

//will output :
/*
Array
(
    [0] => Select Something please
    [1] => potato
    [2] => banana
    [3] => tomato
)
Array
(
    [0] => Select Something please
    [147] => potato
    [258] => banana
    [54] => tomato
)*/





$a=array('a'=>'a1','b'=>'a2','a3','a4','a5');
//$b=array(100=>'b1','b2','a'=>'b3','b4');
$b=array(100=>'b1','b2','a'=>'b3','b4');

$a+=$b;

print_r($a);

?>

output:


Array
(
    [a] => a1
    [b] => a2
    [0] => a3
    [1] => a4
    [2] => a5
    [100] => b1
    [101] => b2
    [102] => b4
)

结果显示:

1、如果被连接的数组中没有指定key,那么就从0开始,默认向后递增。
  如果被连接的数组中有指定的key,也有没有被指定的,指定的key不受影响。
  如果出现有和a数组中重复的,则以a数组中的为准。  
   $a=array('a'=>'a1','b'=>'a2','a3','a4','a5');
      $b=array('z'=>'b1','b2','a'=>'b3','b4');
   Array(
            [a] => a1
            [b] => a2
            [0] => a3
            [1] => a4
            [2] => a5
            [z] => b1
        )
 
  
  如果第一个没有指定,后面的指定了,则这个后面所有未指定的索引全部依次递增。  
  $a=array('a'=>'a1','b'=>'a2','a3','a4','a5');
   $b=array('b1',80=>'b2','a'=>'b3','b4');
   
  Array(
        [a] => a1
        [b] => a2
        [0] => a3
        [1] => a4
        [2] => a5
        [80] => b2
        [81] => b4
    )