PHP数组排序_PHP_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > PHP > PHP数组排序

PHP数组排序

 2017/9/4 17:08:51  xttan  程序员俱乐部  我要评论(0)
  • 摘要:<?phpfunction_key_compare($val1,$val2){return$val1>$val2?1:($val1<$val2?-1:0);}function_array_compare($arr1,$arr2){$keys=['a','b','c'];//需要比较的键foreach($keysas$key){$compare_val=_key_compare($arr1[$key],$arr2[$key]);if($compare_val!=0)
  • 标签:PHP 数组 php数组
class="php" name="code"><?php

function _key_compare($val1, $val2)
{
    return $val1 > $val2 ? 1 : ($val1 < $val2 ? -1 : 0);
}

function _array_compare($arr1, $arr2) {
    $keys = ['a','b','c'];  //需要比较的键
    foreach ($keys as $key) {
        $compare_val = _key_compare($arr1[$key], $arr2[$key]);
        if( $compare_val != 0) {
            return $compare_val;
        }
    }
    return 0;
}

$array = [
    [
        'a' => 'abcdef',
        'b' => '123456',
        'c' => 'TTYYUU',
    ],
    [
        'a' => 'bcedfg',
        'b' => '123456',
        'c' => 'YYUUKK',
    ],
    [
        'a' => 'abcdef',
        'b' => '789100',
        'c' => 'UUKKOO',
    ]
];

usort($array, '_array_campare');
var_dump($array);

//-----------------------------------------------------------------
//封装成类
$array = [
	[
		'a' => 'abcdef',
		'b' => '123456',
		'c' => 'TTYYUU',
	],
	[
		'a' => 'bcedfg',
		'b' => '123456',
		'c' => 'YYUUKK',
	],
	[
		'a' => 'abcdef',
		'b' => '789100',
		'c' => 'UUKKOO',
	],
];

class ArraySort {
	/**
	 * 排序的key
	 * @var array
	 */
	protected $keys = [];

	/**
	 * 构造函数
	 * @param array|string $keys 需要比较的键
	 */
	public function __construct($keys) {
		if (is_string($keys)) {
			$this->keys[] = $keys;
		} else {
			$this->keys = $keys;
		}
	}

	/**
	 * 执行排序
	 *
	 * @param  array $array
	 * @return
	 */
	public function sort($array) {
		var_dump($array);
		usort($array, [$this, "_array_compare"]);
		return $array;
	}

	/**
	 * 比较两个值的大小,字符串or数字
	 *
	 * @param  string|integer $val1 [description]
	 * @param  string|integer $val2 [description]
	 * @return integer
	 */
	private function _key_compare($val1, $val2) {
		return $val1 > $val2 ? 1 : ($val1 < $val2 ? -1 : 0);
	}

	/**
	 * 比较两个数组
	 *
	 * @param  array $arr1 [description]
	 * @param  array $arr2 [description]
	 * @return integer
	 */
	private function _array_compare($arr1, $arr2) {
		foreach ($this->keys as $key) {
			$compare_val = $this->_key_compare($arr1[$key], $arr2[$key]);
			if ($compare_val != 0) {
				return $compare_val;
			}
		}
		return 0;
	}
}

$arraySort = new ArraySort(['a', 'b', 'c']);
$array     = $arraySort->sort($array);

var_dump($array);

?

上一篇: 高通推出新汽车芯片组:瞄准自动驾驶技术 下一篇: 没有下一篇了!
发表评论
用户名: 匿名