Re: the usort 's puzzle
- From: "J.O. Aho" <user@xxxxxxxxxxx>
- Date: Sun, 30 Sep 2007 15:44:32 +0200
youngord@xxxxxxxxx wrote:
<?php
$mix=array(
array("A",10),
array("B",5),
array("C",100)
);
function com($x,$y){
echo $x[0];
}
usort($mix,'com');
?>
i think the $x[0] result is A,
but the final $x[0] result is BC.
why???
first round of usort does:
com(array("B",5),array("A",10))
which leads to that
$x=array("B",5)
$y=array("A",10)
then you echo
$x[0]
which has the value
B
the function returns nothing, which is equal to false (this moves a after b in
the mix array)
second round of usort does:
com(array("C",100),array("B",5))
which leads to that
$y=array("C",100)
$y=array("B",5)
then you echo
$x[0]
which has the value
C
the function returns nothing, which is equal to false (which moves c before b
in the mix array)
Which leads to that you geat an output of
BC
The $mix array looks now like
array(3) {
[0]=>
array(2) {
[0]=>
string(1) "C"
[1]=>
int(100)
}
[1]=>
array(2) {
[0]=>
string(1) "B"
[1]=>
int(5)
}
[2]=>
array(2) {
[0]=>
string(1) "A"
[1]=>
int(10)
}
}
I guess you really wanted
<?php
$mix=array(
array("A",10),
array("B",5),
array("C",100)
);
function com($x,$y){
return ($x[1]<$y[1])?false:true;
}
usort($mix,'com');
//To allow you to see the sorted array
var_dump($mix);
?>
Which gives you
array(3) {
[0]=>
array(2) {
[0]=>
string(1) "B"
[1]=>
int(5)
}
[1]=>
array(2) {
[0]=>
string(1) "A"
[1]=>
int(10)
}
[2]=>
array(2) {
[0]=>
string(1) "C"
[1]=>
int(100)
}
}
Kind of BAC.
--
//Aho
.
- References:
- the usort 's puzzle
- From: youngord
- the usort 's puzzle
- Prev by Date: Re: the usort 's puzzle
- Next by Date: Re: ereg regexp problem
- Previous by thread: Re: the usort 's puzzle
- Next by thread: Determine if string is all uppercase?
- Index(es):
Relevant Pages
|