PHP implode()使用基于对象索引的条件逻辑

时间:2013-06-13 20:32:52

标签: php arrays implode

假设这样一个列表:

   $array = array('item1', 'item2', 'item3'); // etc...

我想创建一个逗号分隔的列表,如下所示:

implode(',', $array);

但是我想使用以下逻辑增加了复杂性:如果项索引是10的倍数,则使用',<br>'而不是','作为{{{ 1}}功能。

使用PHP执行此操作的最佳方法是什么?

我是这样做的,但想知道是否有更简洁的方式?

implode()

3 个答案:

答案 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 ', '