#native_company# #native_desc#
#native_cta#

advanced 2D array sort

By Jeff Pristelski
on January 25, 2002

Version: 1

Type: Function

Category: Algorithms

License: GNU General Public License

Description: sorts arrays of the form:
$array_name[$some_integer][$some_key]
by the 2nd key (“$some_key”)
for example:
$userdata[1][“username”]

/*
given an array ($array), advanced_2Darray_sort will sort
an array of the following form:

$array_name[$some_integer][$some_key]

by the second key ($some_key)

executing is simple...

$messy_array[0]["firstname"] = "john";
$messy_array[0]["lastname"] = "smith";
$messy_array[1]["firstname"] = "jeff";
$messy_array[1]["lastname"] = "iscool";

$neat_array = advanced_2Darray_sort($messy_array, "firstname")

now:
$neat_array[0]["firstname"] = "jeff";
$neat_array[0]["lastname"] = "iscool";
$neat_array[1]["firstname"] = "john";
$neat_array[1]["lastname"] = "smith";


this is really useful for sorting information that 
will be displayed using a table.
*/


function sys_DataCompare ($left, $right)
{
	if ($left == "")
		return(1);
	elseif ($right == "")
		return(-1);
	else
	{
		$left = strtolower($left);
		$right = strtolower($right);
	}
	
	return(strcmp($left, $right));
}

function advanced_2Darray_sort($array, $index_name)
{
	$i = 0;
	foreach ($array[0] as $key=>$data)
	{
		$sys_KEYLIST[$i] = $key;
		$i++;
	}

	//assemble all the arrays...
	for ($i = 0; $i < count($sys_KEYLIST); $i++)
	{
		${$sys_KEYLIST[$i]} = array();

		for ($j = 0; $j < count($array); $j++)
			${$sys_KEYLIST[$i]}[$j] = $array[$j][$sys_KEYLIST[$i]];
	}

	uasort(${$index_name}, "sys_DataCompare");

	$i = 0;
	foreach (${$index_name} as $sort_key=>$junk)
	{
		for ($j = 0; $j < count($sys_KEYLIST); $j++)
			$new_array[$i][$sys_KEYLIST[$j]] = ${$sys_KEYLIST[$j][$sort_key];

		$i++;
	}

	return($new_array);
}