1

假设这样的列表:

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

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

implode(',', $array);

但是有一个额外的复杂性,我想使用以下逻辑:如果项目索引是 10 的倍数,则使用',<br>'而不是仅','用于implode()函数中的分隔符。

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

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

function getInventory($array, $title) { 
    $list = array();
    $length = count($array);

    $i = 1;

    foreach($array as $item) {
        $quantity = $item[1];

        if(!$quantity)
            $quantity = 1;

        $item_text = $quantity . $item[3];

        if($i > 9 && ($i % 10) == 0) {
            $item_text .= ',<br>';
        } elseif($i !== $length) {
            $item_text .= ',';
        }

        $list[] = $item_text;

        $i++;
    }

    $list = implode('', $list);

    $inventory = $title . $list . '<br>';
    return $inventory;
}
4

3 回答 3

3

如果您想<br>在密钥可被 10 整除时使用 ,此解决方案将起作用。

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。

于 2013-06-13T20:44:48.090 回答
1

只要您关心的不是实际的数组键而是数组中的位置(即,中断是在每十个元素上,而不是每个索引是十的倍数),那么您可以这样做:

$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";
}
于 2013-06-13T20:48:22.317 回答
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 ', '
于 2013-06-13T20:49:08.677 回答