前提・実現したいこと
usortの挙動を教えてください。
PHP5技術者認定試験の問題集のソースで、
以下の結果は「5123456789」と表示されるとなっています。
PHP
1function funv($x,$y){ 2 if($x == 5) { 3 return -1; 4 } else if($y == 5) { 5 return 1; 6 } else { 7 return $x -$y; 8 } 9} 10$a = array(8,2,3,6,7,9,1,5,4); 11usort($a,'func'); 12foreach($a as $v){ 13 echo$v 14}
マニュアルには以下とありますが、最初の引数と二番目の引数というのは何を比較しているのでしょうか。
最初の引数と二番目の引数の比較結果を返します。 最初の引数のほうが二番目の引数より大きい場合は正の数を、 二番目の引数と等しい場合はゼロを、 そして二番目の引数より小さい場合は負の数を返す必要があります。
実際のusortの挙動は以下の認識ですが、結果が「5123456789」となりません。
何が違うのでしょうか。
①まず最初に第一引数は8、第二引数は2となる
②$x-$yの正の数が返ってくるので、第二引数が大きいとみなされる
(もうこの時点8 < 2という判定なので誤りですよね?)
③usortは昇順のため「82」と設定される。
④次の第一引数は??、第二引数は3
・・・の流れではないのでしょうか・・・?

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。