2

私の友人は、「このコードを見て、PHP で簡単、簡潔、明快に実行してみてください」と言いました。

colors = ['red', 'blue', 'green', 'yellow']
print 'Choose', ', '.join(colors[:-1]), 'or', colors[-1]

出来ますか?このための「コンパクトだが読みやすい」PHPコードはありますか?

(ところで、この質問は codereview に適合せず、codegolf にも適合しないため、ここで質問します)。

4

3 に答える 3

4

-1PHPには適切なスライス演算子がなく、配列タイプが1つしかないため、実際に有効なキーになる可能性があるため、使用する最後の要素を適切に選択できないため、PHPバージョンは常にPythonバージョンより劣っていると思います。

$colors = array('red', 'blue', 'green', 'yellow');
echo 'Choose ' . implode(', ', array_slice($colors, 0, -1)) . ' or ' . end($colors);
于 2012-04-15T21:29:12.713 に答える
3
function english_list($items, $conj) {
    $tail = $conj . array_pop($items);
    return implode(', ', $items) . $tail;
}

$colors = array('red', 'blue', 'green', 'yellow');
echo "Choose ", english_list($colors, " or "), "\n";

それほど簡潔ではありませんが、言語を知らない人にとっては読みやすいものです。たぶんもっとそうです。colors[:-1]Python ユーザーではないので、何を意味するのかよくわかりません。(たとえば、スライスだと推測しても....何が含まれているのでしょうか?) または、さらに言えば、それはcolors[-1]ほとんどの言語で完全に無効であり、Python の専門家が考えるようなことはしません。それは他のほとんどで行います。

一方、PHP を知らない (ただし、C、C++、Java、JS、Perl、Ruby、さらには Python を知っている) 人でも、これは読みやすいと思います。確かに、彼らは何array_popをしているのかわからないかもしれませんimplodeが、非常に簡単にそれを見つけることができます. どちらかをグーグルで検索してみてください。PHP マニュアル -- 具体的にはそれぞれの関数についてです。-- 最初の結果です。試してみてください:。:) (OK、公平にしましょう: 「python 配列コロン演算子」。) 最初の結果には答えが含まれていますが、配列について知っていること、または知りたくないことのほとんどすべてから掘り下げる必要があります。

于 2012-04-15T21:37:03.683 に答える
1

Python は信じられないほどコンパクトであることで知られていますが、他のほとんどの言語ははるかに冗長です。

このコードに相当する PHP は、より多くの行/ステートメントを使用します (これは 5.4 で導入された構文を使用することに注意してください)。

$colors = ['red', 'blue', 'green', 'yellow'];
echo 'Choose'
    . implode(', ', array_slice($colors, 0, count($colors)-1))
    . ' or '
    . $colors[count($colors)-1]; 

もちろん、's の前の改行.は読みやすくするためにのみ追加されており、必須ではありません

于 2012-04-15T21:37:58.753 に答える