在PHP中,将连接前置到内爆数组末尾的最佳方法是什么?

在PHP中,将连接前置到内爆数组末尾的最佳方法是什么?,php,arrays,string,list,Php,Arrays,String,List,假设我有一个数组 $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 cer

假设我有一个数组

$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.
数组长度可变,可以是关联的,最好不要修改。它也不需要内爆;我想这只是做这类事情的标准方式。数组解引用也很好,但是与PHP5.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;
}
这两种方式似乎都是迂回的。有没有更好的解决办法?这也更干净

$pop = array_pop($shopping_list);
echo implode(", ", $shopping_list)." and $pop.";
这也更干净

$pop = array_pop($shopping_list);
echo implode(", ", $shopping_list)." and $pop.";

复制数组可能会有一些想法

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

Starx解决方案更好。

复制阵列可能是个好主意

 $array = array_values($shopping_list);
 $array[count($array)-1] = $extraword . ' ' . $array[count($array)-1];
 // implode etc.
Starx解决方案更好。

另一种解决方案:

$last = count($shopping_list)-1 ;
$shopping_list[$last] = "in {$shopping_list[$last]} ;
另一个解决方案:

$last = count($shopping_list)-1 ;
$shopping_list[$last] = "in {$shopping_list[$last]} ;

这不是一件标准的事情,您已经提供了两种解决方案。这不是问题。@markus“那”是什么?字符串操作?我用PHP做我的购物清单。这很有帮助:@Voitcus我只是在使用一个计数器,以防数组是关联的。@danronmoon是的,我意识到了这一点,并删除了注释,以供将来参考。它将foreach$array用作$I=>$item。这不是一个标准操作,您已经提供了两个解决方案。这不是问题。@markus“那”是什么?字符串操作?我用PHP做我的购物清单。这很有帮助:@Voitcus我只是用了一个计数器,以防数组是关联的。@danronmoon是的,我意识到了这一点,并删除了注释,以供将来参考。它是将foreach$array用作$I=>$item。啊,我喜欢这个。谢谢。啊,我喜欢这个。谢谢。我喜欢Starx解决方案的声音:+1现在我想如果数组是关联的,这可能不起作用。如果数组是关联的,将$array设置为array\ U values$SHOPING\ U list可能会有帮助。好主意。我喜欢Starx解决方案的声音:+1现在我想如果数组是关联的,这可能不起作用。如果数组是关联的,将$array设置为array\ U values$SHOPING\ U list可能会有帮助。好电话。