Entry
How can I use 'array_multisort' to implement sql clause "order by col1 asc, col2 desc, col3 asc" ?
Jun 12th, 2001 18:54
kallioppi Garemba, Ben Udall, Juergen Ko, http://www.php.net/manual/en/function.array-multisort.php
$data = array(array("Row1 Col1", "Row2, Col1", "Row3, Col1"),
array("Row1 Col2", "Row2, Col2", "Row3, Col2"),
array("Row1 Col3", "Row2, Col3", "Row3, Col3"));
array_multisort($data[0], SORT_ASC,
$data[1], SORT_DESC,
$data[2], SORT_ASC);
PROBLEM: This doesn't seem to work for me.
REASON : The sorted and unsorted contents of the array are identical.
MY PHP Version: 4.0.4pl1
1. SCRIPT:
------------------------------------------
<?php
$data = array(array("Row1 Col1", "Row2, Col1", "Row3, Col1"),
array("Row1 Col2", "Row2, Col2", "Row3, Col2"),
array("Row1 Col3", "Row2, Col3", "Row3, Col3"));
echo '<H5>$data</H5>';
print_r($data);
echo '<H5>multisort($data) </H5>';
array_multisort($data[0], SORT_ASC,
$data[1], SORT_DESC,
$data[2], SORT_ASC);
print_r($data);
exit;
?>
2. OUTPUT
------------------------------------------
2.1 THIS IS THE UNSORTED ARRAY DATA
------------------------------------------
$dataArray
(
[0] => Array
(
[0] => Row1 Col1
[1] => Row2, Col1
[2] => Row3, Col1
)
[1] => Array
(
[0] => Row1 Col2
[1] => Row2, Col2
[2] => Row3, Col2
)
[2] => Array
(
[0] => Row1 Col3
[1] => Row2, Col3
[2] => Row3, Col3
)
)
2.2 THIS IS THE S O R T E D ARRAY DATA
(identical with the unsorted array data)
------------------------------------------
multisort($data) Array
(
[0] => Array
(
[0] => Row1 Col1
[1] => Row2, Col1
[2] => Row3, Col1
)
[1] => Array
(
[0] => Row1 Col2
[1] => Row2, Col2
[2] => Row3, Col2
)
[2] => Array
(
[0] => Row1 Col3
[1] => Row2, Col3
[2] => Row3, Col3
)
)
3. SOLUTION W/O array_multisort() FROM THE PHP MANUAL
FOR THE usort() FUNCTION
--------------------------------------------------------
Example 2. Usort() example using multi-dimensional array
function cmp ($a, $b) {
return strcmp($a["fruit"],$b["fruit"]);
}
$fruits[0]["fruit"] = "lemons";
$fruits[1]["fruit"] = "apples";
$fruits[2]["fruit"] = "grapes";
usort($fruits, "cmp");
while (list ($key, $value) = each ($fruits)) {
echo "\$fruits[$key]: " . $value["fruit"] . "\n";
}
When sorting a multi-dimensional array, $a and $b contain references to
the first index of the array.
This example would display:
$fruits[0]: apples
$fruits[1]: grapes
$fruits[2]: lemons