the usort "s puzzle

the usort "s puzzle

am 30.09.2007 05:40:22 von youngord

$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???

Re: the usort "s puzzle

am 30.09.2007 15:16:47 von Jerry Stuckle

youngord@gmail.com wrote:
> > $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???
>

Your com() function doesn't return a value, as required by usort(). So
results are completely unpredictable.

--
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
jstucklex@attglobal.net
==================

Re: the usort "s puzzle

am 30.09.2007 15:44:32 von Shion

youngord@gmail.com wrote:
> > $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

$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

Re: the usort "s puzzle

am 01.10.2007 03:08:17 von youngord

On Sep 30, 9:44 pm, "J.O. Aho" wrote:
> young...@gmail.com wrote:
> > > > $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
>
> > $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

thanks very much. i understand clearly.^_^