php 数组排序

php 对于一维数组的排序有 俩种情况,一种是按值排序,一种是按键值, 其中不同的排序函数有不同的用法,有的会失去索引关系,有的会保持索引关系。但是都比较方便。

对于多维数组来说,就需要自己定义排序函数。其实就感觉像c,c++ 那样。对结构体之类的进行排序。

对于数组排序来说,分俩种情况,一种是对数字排序,一种是对字符串进行排序。

对数字进行排序


<?php
	function numSort($x,$y){
		return $x['a'] < $y['a'];
	}
	$array = array(
		'a'=>array('a'=>1,'b'=>'a'),
		'b'=>array('a'=>2,'b'=>'b'),
		'c'=>array('a'=>3,'b'=>'c'),
		'd'=>array('a'=>4,'b'=>'d')
	);
	var_dump($array);
	echo "<hr>";
	usort($array,'numSort');
	var_dump($array);
?>


array
  'a' => 
    array
      'a' => int 1
      'b' => string 'a' (length=1)
  'b' => 
    array
      'a' => int 2
      'b' => string 'b' (length=1)
  'c' => 
    array
      'a' => int 3
      'b' => string 'c' (length=1)
  'd' => 
    array
      'a' => int 4
      'b' => string 'd' (length=1)

array
  0 => 
    array
      'a' => int 4
      'b' => string 'd' (length=1)
  1 => 
    array
      'a' => int 3
      'b' => string 'c' (length=1)
  2 => 
    array
      'a' => int 2
      'b' => string 'b' (length=1)
  3 => 
    array
      'a' => int 1
      'b' => string 'a' (length=1)


发现索引关系没了。如果要保持索引关系,那么使用uasort就可以了。


对于字符串的排序,就需要考虑的字典序。

<pre name="code" class="php"><?php
	function keySort($x,$y){
		return strcasecmp($y['b'], $x['b']);//不区分大小写
	}
	$array = array(
		'a'=>array('a'=>1,'b'=>'a'),
		'b'=>array('a'=>2,'b'=>'b'),
		'c'=>array('a'=>3,'b'=>'c'),
		'd'=>array('a'=>4,'b'=>'d')
	);
	var_dump($array);
	echo "<hr>";
	usort($array,'keySort');
	var_dump($array);
?>


 
  'a' => 
    array
      'a' => int 1
      'b' => string 'a' (length=1)
  'b' => 
    array
      'a' => int 2
      'b' => string 'b' (length=1)
  'c' => 
    array
      'a' => int 3
      'b' => string 'c' (length=1)
  'd' => 
    array
      'a' => int 4
      'b' => string 'd' (length=1)

array
  0 => 
    array
      'a' => int 4
      'b' => string 'd' (length=1)
  1 => 
    array
      'a' => int 3
      'b' => string 'c' (length=1)
  2 => 
    array
      'a' => int 2
      'b' => string 'b' (length=1)
  3 => 
    array
      'a' => int 1
      'b' => string 'a' (length=1)



对键值排序

<pre name="code" class="php"><?php
	function keySort($x,$y){
		return strcasecmp($y, $x);//不区分大小写
	}
	$array = array(
		'a'=>array('a'=>4,'b'=>'d'),
		'b'=>array('a'=>3,'b'=>'c'),
		'c'=>array('a'=>2,'b'=>'b'),
		'd'=>array('a'=>1,'b'=>'a')
	);
	var_dump($array);
	echo "<hr>";
	uksort($array,'keySort');
	var_dump($array);
?>


 
array
  'a' => 
    array
      'a' => int 4
      'b' => string 'd' (length=1)
  'b' => 
    array
      'a' => int 3
      'b' => string 'c' (length=1)
  'c' => 
    array
      'a' => int 2
      'b' => string 'b' (length=1)
  'd' => 
    array
      'a' => int 1
      'b' => string 'a' (length=1)

array
  'd' => 
    array
      'a' => int 1
      'b' => string 'a' (length=1)
  'c' => 
    array
      'a' => int 2
      'b' => string 'b' (length=1)
  'b' => 
    array
      'a' => int 3
      'b' => string 'c' (length=1)
  'a' => 
    array
      'a' => int 4
      'b' => string 'd' (length=1)

php 数组还是很强大。感觉学习不少

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值