Sorting two dimensional array like query result by sub array's key in PHP

Blog
PHP

PHP offers dozens of functions for sorting arrays, but unfortunately non of this functions support sorting by sub arrays key out of the box. It's very useful when you want to sort the result of a query by an specific column.

Sample :

$users=array(
	array(
		'username'=>'Ashkan1',
		'age'=>20, 
	),
	array(
		'username'=>'Ashkan2',
		'age'=>35, 
	),
	array(
		'username'=>'Ashkan3',
		'age'=>18, 
	),  
);
$users=arraySortTwoDimByValueKey($users,'age','asc');

Result :

array (
	array(
		'username'=>'Ashkan3',
		'age'=>18, 
	),
	array(
		'username'=>'Ashkan1',
		'age'=>20, 
	),
	array(
		'username'=>'Ashkan2',
		'age'=>35, 
	),
)

And the function :

 

/**
 * Sorting two dimensional array by sub-key's value 
 * 
 * @param $array array
 * @param $by string //Sub-key name
 * @param $type string //asc,desc
 * @return array
 */
function arraySortTwoDimByValueKey($array,$by,$type='asc') {
	$sortField=&$by;
	$multArray=&$array;
	
	$tmpKey='';
	$ResArray=array();
	$maIndex=array_keys($multArray);
	$maSize=count($multArray)-1;
	for($i=0; $i < $maSize ; $i++) {
		$minElement=$i;
		$tempMin=$multArray[$maIndex[$i]][$sortField];
		$tmpKey=$maIndex[$i];
		for ($j=$i+1; $j <= $maSize; $j++) {
			if ($multArray[$maIndex[$j]][$sortField] < $tempMin ) {
				$minElement=$j;
				$tmpKey=$maIndex[$j];
				$tempMin=$multArray[$maIndex[$j]][$sortField];
	     		}
		}
		$maIndex[$minElement]=$maIndex[$i];
		$maIndex[$i]=$tmpKey;
	}
	if ($type=='asc') {
		for ($j=0;$j<=$maSize;$j++) {
			$ResArray[$maIndex[$j]]=$multArray[$maIndex[$j]];
		}
	} else {
		for ($j=$maSize;$j>=0;$j--) {
			$ResArray[$maIndex[$j]]=$multArray[$maIndex[$j]];
		}
	}
	
	return $ResArray;
}

 

Your rating: None Average: 3 (3 votes)

Comments

film izle's picture

Thanks. Very Nice. Thanks You

4

Thanks. Very Nice. Thanks You Admin For Sharing.