重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

http://www.php.net/manual/ja/function.usort.php
にusortの例として下記がありますが、それについて質問です。

-------------例文-------------
<?php
function cmp($a, $b)
{
return strcmp($a["fruit"], $b["fruit"]);
}

$fruits[0]["fruit"] = "lemons";
$fruits[1]["fruit"] = "apples";
$fruits[2]["fruit"] = "grapes";

usort($fruits, "cmp");

while (list($key, $value) = each($fruits)) {
echo "\$fruits[$key]: " . $value["fruit"] . "\n";
}
?>
-------------結果-------------
$fruits[0]: apples
$fruits[1]: grapes
$fruits[2]: lemons

上の例は、usortで$fruitsという配列をソートしています。
そのとき、cmpという関数を条件にしている、というのは分かりますが、
なぜcmpを条件にすることでアルファベットの昇順になるのでしょうか?
strcmp($a["fruit"], $b["fruit"]);にたとえばlemonsとかapplesが入って
strcmpによって比較がされて、結果として1や-1が返されて
その結果、たとえばusort($fruits, "-1")や、usort($fruits, "1")
となったとします。それがなぜ結果として昇順になるのでしょうか?

A 回答 (1件)

>それがなぜ結果として昇順になるのでしょうか?



そうなるような関数だからとしか言いようがないと思いますが・・・

usortの第一引数に配列をいれ、第二引数についてはコールバック関数を指定しいます
コールバック関数の第一引数と、第二引数を比較して、大小をチェックして

1か0か-1の戻り値によりソートするというのがusortなので・・・

あとはいろんな例をご自身で確かめて理解する以外ないでしょう
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!