假设这样一个列表:
$array = array('item1', 'item2', 'item3'); // etc...
我想创建一个逗号分隔的列表,如下所示:
implode(',', $array);
但是我想使用以下逻辑增加了复杂性:如果项索引是10的倍数,则使用',<br>'
而不是','
作为{{{ 1}}功能。
使用PHP执行此操作的最佳方法是什么?
我是这样做的,但想知道是否有更简洁的方式?
implode()
答案 0 :(得分:3)
如果您希望在密钥被10整除时使用<br>
,则此解决方案将有效。
implode(',', array_map(function($v, $k){ return $k%10 ? $v : '<br>' . $v; }, $array, array_keys($array)));
如果您希望每个第10个元素而不仅仅是键可以被10整除的元素,请使用:
implode(',', array_map(function($v, $k){ return $k%10 ? $v : '<br>' . $v; }, $array, range(1, count($array)));
感谢@Jacob的这种可能性。
我们为implode函数保留,
,并可变地调整输入数组值,以<br>
为前缀。
$k%10
使用模运算符返回$k divided by 10
的余数,当$k
是10的倍数时,该余数将为0。
答案 1 :(得分:1)
只要它不是您关注的实际数组键,而是数组中的位置(即,break是每十个元素而不是每个十进制数的索引),那么你可以做就这样:
$foo = array();
for($n = 0; $n < 54; $n++) $foo[] = $n;
$parts = array_chunk($foo, 10);
for($n = 0; $n < count($parts); $n++){
echo implode(',', $parts[$n]);
if($n < count($parts) - 1) echo ',';
echo "<br/>\n";
}
答案 2 :(得分:0)
$str = '';
$array = ....;
$i = 0;
foreach($array as $index)
$str .= $array[$index].' ,'.($index % 10 ? ' ' : '<br/>');
$str = substr($str, 0, strlen($str) - 2); // trim the last two characters ', '