|
|
|
#2 (permalink) |
|
Messages: n/a
Hébergeur: |
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??? > 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 ================== |
|
|
|
#3 (permalink) |
|
Messages: n/a
Hébergeur: |
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 |
|
|
|
#4 (permalink) |
|
Messages: n/a
Hébergeur: |
On Sep 30, 9:44 pm, "J.O. Aho" <u...@example.net> wrote:
> young...@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 thanks very much. i understand clearly.^_^ |
|
![]() |
| Outils de la discussion | |
|
|