LoginSignup
taipi148903
@taipi148903 (大貴 田島)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

PHPの宇宙船演算子についての質問

宇宙船演算子について

このソースコードについて質問させてください。


<?php
$a = ["ehon", "shiori"];
$b = $a[0] <=> $a[1];
print "$a[0]は$a[1]";
print $b ==0 ? "と同じ" :
($b < 0 ? "よりも辞書的に前" : "よりも辞書的に後ろ");
print "です";
?>

このソースコードを実行すると「ehonはshioriよりも辞書的に前です」と表示されるのですが、「ehonはshioriと同じです」と表示したいと思っています。

どのようにソースコードを変更すれば、上記のように表示されるのでしょうか?

どなたか回答をお待ちしております。

0

2Answer

やりたいのはこういうことで合ってましたでしょうか

<?php

$f = fn(string $a, string $b) => sprintf("%s は %s %sです\n", $a, $b, [
    0 => 'と同じ',
    -1 => 'よりも辞書的に前',
    1 => 'よりも辞書的に後ろ',
][$a <=> $b]);

echo $f('ehon', 'ehon'); // ehon は ehon と同じです
echo $f('ehon', 'shori'); // ehon は shori よりも辞書的に前です
echo $f('shori', 'ehon'); // shori は ehon よりも辞書的に後ろです
0

("ehon" <=> "shiori") === -1 、つまり "ehon""shiori" より辞書的に前と判定されるのは事実です。にもかかわらず「ehonはshioriと同じです」と表示したいということでしょうか。それなら何も判定せずに出力するだけですが……

<?php
$a = ["ehon", "shiori"];
print("$a[0]は$a[1]と同じです\n");
0

Comments

  1. @taipi148903

    Questioner
    ご回答いただきありがとうございます。
    おっしゃるとおりにコードを書き換えたら、希望した表示内容に切り替わりました。
    大変ありがとうございました。

Your answer might help someone💌