Usort
| From: | Jonathan Pitcher | Date: | Thu, 03 Apr 2003 21:53:18 +0000 |
| Subject: | Usort | ||
| Groups: | php.general | ||
| Request: | Send a blank email to php-general+get-142200@lists.php.net to get a copy of this message | ||
This email is long I apologize for that. It is my code and then what it returns and what I am wanting it to return. I don't think I understand how USORT works or even if I am using the right function for what I am looking for.
Thanks in advance for your help
Jonathan Pitcher
###################################################
Begin Code
###################################################
I have a multilevel array:
$EA = array();
$EA[0]["STARTDATE"] = "2003:03:01";
$EA[0]["ENDDATE"] = "2003:03:01";
$EA[0]["STARTTIME"] = "7:30";
$EA[0]["ENDTIME"] = "8:30";
$EA[1]["STARTDATE"] = "2003:02:01";
$EA[1]["ENDDATE"] = "2003:03:01";
$EA[1]["STARTTIME"] = "7:30";
$EA[1]["ENDTIME"] = "8:30";
$EA[2]["STARTDATE"] = "2003:03:01";
$EA[2]["ENDDATE"] = "2003:03:01";
$EA[2]["STARTTIME"] = "8:30";
$EA[2]["ENDTIME"] = "9:30";
$EA[3]["STARTDATE"] = "2003:03:01";
$EA[3]["ENDDATE"] = "2003:03:01";
$EA[3]["STARTTIME"] = "7:30";
$EA[3]["ENDTIME"] = "8:30";
$EA[4]["STARTDATE"] = "2003:03:01";
$EA[4]["ENDDATE"] = "2003:03:02";
$EA[4]["STARTTIME"] = "7:30";
$EA[4]["ENDTIME"] = "8:30";
usort($EA, "compareall");
print_r($EA);
function compareall($A, $B)
{
if ($A["STARTDATE"] < $B["STARTDATE"])
{
return 4;
}
else if ($A["STARTTIME"] < $B["STARTTIME"])
{
return 3;
}
else if ($A["ENDDATE"] > $B["ENDDATE"])
{
return 2;
}
else if ($A["ENDTIME"] > $B["ENDTIME"])
{
return 1;
}
else if ($A["STARTDATE"] > $B["STARTDATE"])
{
return -4;
}
else if ($A["STARTIME"] > $B["STARTTIME"])
{
return -3;
}
else if ($A["ENDDATE"] < $B["ENDDATE"])
{
return -2;
}
else if ($A["ENDTIME"] < $B["ENDTIME"])
{
return -1;
}
else
{
return 0;
}
}
This prints:
Array
(
[0] => Array
(
[STARTDATE] => 2003:03:01
[ENDDATE] => 2003:03:01
[STARTTIME] => 7:30
[ENDTIME] => 8:30
)
[1] => Array
(
[STARTDATE] => 2003:03:01
[ENDDATE] => 2003:03:01
[STARTTIME] => 7:30
[ENDTIME] => 8:30
)
[2] => Array
(
[STARTDATE] => 2003:03:01
[ENDDATE] => 2003:03:02
[STARTTIME] => 7:30
[ENDTIME] => 8:30
)
[3] => Array
(
[STARTDATE] => 2003:02:01
[ENDDATE] => 2003:03:01
[STARTTIME] => 7:30
[ENDTIME] => 8:30
)
[4] => Array
(
[STARTDATE] => 2003:03:01
[ENDDATE] => 2003:03:01
[STARTTIME] => 8:30
[ENDTIME] => 9:30
)
)
I want it to print this:
Array
(
[0] => Array
(
[STARTDATE] => 2003:02:01
[ENDDATE] => 2003:03:01
[STARTTIME] => 7:30
[ENDTIME] => 8:30
)
[1] => Array
(
[STARTDATE] => 2003:03:01
[ENDDATE] => 2003:03:01
[STARTTIME] => 7:30
[ENDTIME] => 8:30
)
[2] => Array
(
[STARTDATE] => 2003:03:01
[ENDDATE] => 2003:03:01
[STARTTIME] => 7:30
[ENDTIME] => 8:30
)
[3] => Array
(
[STARTDATE] => 2003:03:01
[ENDDATE] => 2003:03:01
[STARTTIME] => 8:30
[ENDTIME] => 9:30
)
[4] => Array
(
[STARTDATE] => 2003:03:01
[ENDDATE] => 2003:03:02
[STARTTIME] => 7:30
[ENDTIME] => 8:30
)
)