使用PHP内爆+数组返回逗号分隔的列表


Use PHP implode + array to return a comma separated list?

我正在用WP Alchemy类编写一些WordPress代码,我试图回忆页面模板中使用的元值作为逗号分隔的列表。但是,当WP Alchemy Meta Boxes将值存储到域中时,它们不会使用分隔符或空格保存,所以它很像:onetwo, threfour, five…

到目前为止我写的是:

<?php $meta = get_post_meta(get_the_ID(), $custom_metabox->get_the_id(), TRUE); ?>
<li>Via: <?php foreach ($meta['g2m_via'] as $link) { ?><a href="<?php echo $link['g2m_via-link']; ?>">
<?php
$prefix = ', ';
$words = array();
$words[] = $link['g2m_via-title'];
$words = array_map("unserialize", array_unique(array_map("serialize", $words)));
for($i = 0; $i < count($words); $i++){ $fruitlist = implode(', ', $words); print_r($fruitlist); } 
?></a><?php } ?></li>

$link['g2m_via-title']只是存储在元字段中的链接的名称,即Link1将是名称,google,,com将是链接(这在这里并不重要,我有那个工作)。其他的变量都在这里。$prefix变量什么也不做,它的作用是作为一个分隔符,就像:$val .= $prefix。"美元的链接("g2m_via-title");. ";但是,它导致:Link1, Link1, Link 2, Link1, Link 2, Link 3。

到目前为止,我已经得到了最接近我想要的代码:
Link1Link2Link3

但必须是:Link1, Link2, Link3,以此类推,最后一个链接标题不加逗号。

var_dump($link)输出:

array(2) { 
    ["g2m_via-title"]=> string(7) "JoyStiq" 
    ["g2m_via-link"]=> string(22) "joystiq.com"; 
}JoyStiq 
array(2) { 
    ["g2m_via-title"]=> string(9) "GrindGadget" 
    ["g2m_via-link"]=> string(16) "grindgadget.com"; 
} GrindGadget 
array(2) { 
    ["g2m_via-title"]=> string(13) "Engadget" 
    ["g2m_via-link"]=> string(13) "engadget.com"; 
} Engadget

我想让["g2m_via-title"]停止复制:

array[1] { 
    ["g2m_via-title"]=> "JoyStiq" 
    ["g2m_via-link"]=> "joystiq.com"; 
}
array[2] { 
    ["g2m_via-title"]=> "GrindGadget" 
    ["g2m_via-link"]=> "grindgadget.com"; 
}
array[3] { 
    ["g2m_via-title"]=> "Engadget" 
    ["g2m_via-link"]=> "engadget.com"; 
}

我尝试过的无数其他代码中的第3个:http://pastebin.com/wa0R8sDw。

假设数据结构如下:

$links = array(
    array( 
        "g2m_via-title" => "JoyStiq",
        "g2m_via-link"  => "joystiq.com"
    ),
    array( 
        "g2m_via-title" => "GrindGadget",
        "g2m_via-link"  => "grindgadget.com"
    ),
    array( 
        "g2m_via-title" => "Engadget",
        "g2m_via-link"  => "engadget.com"
    )
);

这要做:

$output = array();
foreach ($links as $link) {
    $output[] = sprintf('<a href="http://%s">%s</a>',
                        $link['g2m_via-link'],
                        htmlentities($link['g2m_via-title']));
}
echo join(', ', $output);

在PHP 5.3+中也是如此:

echo join(', ', array_map(function ($link) {
    return sprintf('<a href="http://%s">%s</a>',
                   $link['g2m_via-link'],
                   htmlentities($link['g2m_via-title']));
}, $links));