Discussion: the usort 's puzzle
Afficher un message
Vieux 30/09/2007, 14h44   #3
J.O. Aho
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: the usort 's puzzle

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
  Réponse avec citation
 
Page generated in 0,06726 seconds with 9 queries