使用逗号分隔符遍历 PHP 数组,除了最后一个。

8

我正在努力将jplayer html5音频播放列表整合进来。

我使用foreach为每个播放列表项生成脚本元素。一切都按预期工作,除了我在循环中包含了逗号,但我需要一种方法来将逗号写入分隔符,除了最后一个项目。

以下是我目前生成jplayer播放列表的代码:

<?php foreach( $songs as $song ): if( !empty($song) ): ?>{

        title:"Each Song Title",

        mp3:"Each song mp3 url"

    },<?php endif; endforeach; ?>

这给了我

    {

        title:"Partir",

        mp3:"http://www.jplayer.org/audio/mp3/Miaow-09-Partir.mp3"

    },

    {

        title:"Thin Ice",

        mp3:"http://www.jplayer.org/audio/mp3/Miaow-10-Thin-ice.mp3"

    },
    {

        title:"Ice man",

        mp3:"http://www.jplayer.org/audio/mp3/Miaow-10-Thin-ice.mp3"

    },

这是我想要的结果

    {

        title:"Partir",

        mp3:"http://www.jplayer.org/audio/mp3/Miaow-09-Partir.mp3"

    },

    {

        title:"Thin Ice",

        mp3:"http://www.jplayer.org/audio/mp3/Miaow-10-Thin-ice.mp3"

    },
    {

        title:"Ice man",

        mp3:"http://www.jplayer.org/audio/mp3/Miaow-10-Thin-ice.mp3"

    }

有人能指点我正确的方向吗?

3
为什么不直接使用json_encode呢? - Gordon
3个回答

25

我使用 next() 来实现:

$arr = array(1,2,3,4,5,6,7);
$copy = $arr;
foreach ($arr as $val) {
    echo $val;
    if (next($copy )) {
        echo ','; // Add comma for all elements instead of last
    }
}

1
a) foreach 循环遍历的是数组的副本 b) next() 方法用于移动游标。它可以工作,但实际上它并不能正常工作,因为你认为它可以正常工作的原因是错觉。事实上,你同时遍历了两个(相同的)数组,并且只有当你意识到已经到达第二个数组的末尾时才停止循环。 - KingCrunch
至少它给出了预期的结果 ^^ - KingCrunch
在一个非常大的循环中每次执行一个“if”语句,比仅仅删除最后一个逗号慢吗? - NaturalBornCamper

4
你是指 JSON 吗?
echo json_encode($array);

你也可以使用数组函数来代替。
// Create single items first
$array = array_map(
    function ($item) {
        return sprintf(
            '{title:"%s",mp3:"%s"}',
            $item['title'],
            $item['mp3']
        );
    },
    $array
);

// Then concatenate
echo implode(',', $array);

只是为了完整起见:一个“for”解决方案
for ($n = count($array), $i = 0; $i < $n; $i++) {
    echo sprintf('{title:"%s",mp3:"%s"}', $array[$i]['title'], $array[$i]['mp3']) . ($i < $n-1 ? ',' : '');
}

3
你还可以将其存储在字符串中,而不是直接向浏览器输出。
<?php 
$string = "";
foreach( $songs as $song ) { 
    if( !empty($song) )
    { 
        $string .= '
    {

        title:"Each Song Title",

        mp3:"Each song mp3 url"

    },

    ';
    }
 }
 $string = substr($string, 0, -1); //Removes very last comma.
 echo $string;
 ?>

这也允许在需要时在代码中的其他地方使用它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接