配列があるとしましょう。
$shopping_list = array('eggs', 'butter', 'milk', 'cereal');
これをカンマ区切りのリストとして表示し、最後の値の前に単語 (接続詞、前置詞など) を追加する最も簡単で賢い方法は何ですか? 望ましい結果は次のとおりです。
'eggs, butter, milk, and cereal'
'eggs, butter, milk, or cereal'
'eggs, butter, milk, with cereal'
'eggs, butter, milk, in cereal'
// etc.
配列は可変長で、連想可能で、できれば変更しないでください。内破する必要もありません。これは、このようなことを行う標準的な方法にすぎないと思います。配列の逆参照も問題ありませんが、PHP 5.3 と互換性のあるものがあればすばらしいでしょう。
私はその線に沿って何かを考えています
$extra_word = 'and';
implode(', ', array_slice($shopping_list, 0, count($shopping_list) - 1))
. ', ' . $extra_word . ' '
. implode(',', array_slice($shopping_list, count($shopping_list) - 1));
しかし、それは大げさです。ループはよりクリーンで、わずかに不適切ではありません。
$i = 0;
$output = '';
foreach ($shopping_list as $item) {
$i += 1;
if ($i > 1) {
$output .= ', ';
if ($i === count($shopping_list)) {
$output .= $extra_word . ' ';
}
}
$output .= $item;
}
これらの方法はどちらも回りくどいようです。頭に浮かぶより良い方法はありますか?