1

配列があるとしましょう。

$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;
}

これらの方法はどちらも回りくどいようです。頭に浮かぶより良い方法はありますか?

4

3 に答える 3

6

これもすっきり。

$pop = array_pop($shopping_list);
echo implode(", ", $shopping_list)." and $pop.";
于 2013-05-09T10:40:09.627 に答える
3

いくつかのアイデアは、配列をコピーすることにあるかもしれません。

 $array = array_values($shopping_list);
 $array[count($array)-1] = $extraword . ' ' . $array[count($array)-1];
 // implode etc.

Starx ソリューションの方が優れています。

于 2013-05-09T10:42:45.137 に答える
0

別の解決策:

$last = count($shopping_list)-1 ;
$shopping_list[$last] = "in {$shopping_list[$last]} ;
于 2013-05-09T10:42:46.793 に答える