PHP 兩個多維數組根據某個鍵的值進行組合排序的幾種思路(二)

幾個通過封裝的方法:php

1.使用 array_multisort() 函數html

<?php

$arr = [
	['name'=>'dee','age'=>28],
	['name'=>'emperor', 'age'=>30],
	['name'=>'Lee', 'age'=>32],
	['name'=>'Arshavin', 'age'=>33],
	['name'=>'Totti', 'age'=>40]
];

$arr2 = [
	['name'=>'Ozil', 'age'=>27],
	['name'=>'CR7', 'age'=>29],
	['name'=>'Doctor', 'age'=>33],
	['name'=>'John', 'age'=>35]
];


function multi_array_sort($multi_array, $sort_key, $sort = SORT_DESC) {
	if (is_array($multi_array)) {
		foreach ($multi_array as $row_array) {
			if (is_array($row_array)) {
				$key_array[] = $row_array[$sort_key];
			} else {
				return FALSE;
			}
		}
	} else {
		return FALSE;
	}
	array_multisort($key_array, $sort, $multi_array);
	return $multi_array;
}

$arr = array_merge($arr, $arr2);
$arr = multi_array_sort($arr, 'age', SORT_ASC);

echo '<pre>';
print_r($arr);

說明:在 multi_array_sort 的自定義方法中,$key_array 完成對年齡的一維數組的排序,再使用 array_multisort() 函數對原數組進行排序。數組

bool array_multisort ( array &$arr [, mixed $arg = SORT_ASC [, mixed $arg = SORT_REGULAR [, mixed $... ]]] )

array_multisort() 能夠用來一次對多個數組進行排序,或者根據某一維或多維對多維數組進行排序。輸入數組被當成一個表的列並以行來排序——這相似於 SQL 的 ORDER BY 子句的功能。第一個數組是要排序的主要數組。數組中的行(值)比較爲相同的話就按照下一個輸入數組中相應值的大小來排序,依此類推。函數

 

 

2. 使用臨時數組存儲須要排序的字段,通過排序後,經過在 froeach 循環中 $new_array[] = $arr[$k]; 把通過排序的字段數組的索引值做爲原始數組的索引值存儲至新的數組spa

<?php

$arr = [
	['name'=>'dee','age'=>28],
	['name'=>'emperor', 'age'=>30],
	['name'=>'Lee', 'age'=>32],
	['name'=>'Arshavin', 'age'=>33],
	['name'=>'Totti', 'age'=>40]
];

$arr2 = [
	['name'=>'Ozil', 'age'=>27],
	['name'=>'CR7', 'age'=>29],
	['name'=>'Doctor', 'age'=>33],
	['name'=>'John', 'age'=>35]
];


function array_sort($arr, $keys, $type = 'asc') {
	$keysvalue = $new_array = array();
	foreach ($arr as $k => $v) {
		$keysvalue[$k] = $v[$keys];
	}

	if ($type == 'asc') {
		asort($keysvalue);
	} else {
		arsort($keysvalue);
	}

	reset($keysvalue);

	foreach ($keysvalue as $k => $v) {
		$new_array[] = $arr[$k];
	}

	return $new_array;
}

$arr = array_merge($arr, $arr2);
$arr = array_sort($arr, 'age');

echo '<pre>';
print_r($arr);

  

 

3. 和 2 差很少,多了些驗證.net

<?php

$arr = [
	['name'=>'dee','age'=>28],
	['name'=>'emperor', 'age'=>30],
	['name'=>'Lee', 'age'=>32],
	['name'=>'Arshavin', 'age'=>33],
	['name'=>'Totti', 'age'=>40]
];

$arr2 = [
	['name'=>'Ozil', 'age'=>27],
	['name'=>'CR7', 'age'=>29],
	['name'=>'Doctor', 'age'=>33],
	['name'=>'John', 'age'=>35]
];


function array_sort($array,$keys,$type='asc'){

	if(!isset($array) || !is_array($array) || empty($array)){
		return '';
	}

	if(!isset($keys) || trim($keys)==''){
		return '';
	}

	if(!isset($type) || $type=='' || !in_array(strtolower($type),array('asc','desc'))){
		return '';
	}

	$keysvalue=array();
	foreach($array as $key=>$val){
		$keysvalue[] =$val[$keys];
	}

	asort($keysvalue); //key值排序
	reset($keysvalue); //指針從新指向數組第一個

	foreach($keysvalue as $key=>$vals) {
		$keysort[] = $key;
	}

	$keysvalue = array();
	$count=count($keysort);

	if(strtolower($type) != 'asc'){
		for($i=$count-1; $i>=0; $i--) {
			$keysvalue[] = $array[$keysort[$i]];
		}
	}else{
		for($i=0; $i<$count; $i++){
			$keysvalue[] = $array[$keysort[$i]];
		}
	}
	return $keysvalue;
}

$arr = array_merge($arr, $arr2);
$arr = array_sort($arr, 'age');

echo '<pre>';
print_r($arr);

  

參考:php對多維數組的某個鍵值排序方法指針

相關文章
相關標籤/搜索