|
Posted by J.O. Aho on 09/30/07 13:44
youngord@gmail.com 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
Navigation:
[Reply to this message]
|