使用PHP implode + array返回逗号分隔列表?

时间:2011-08-27 12:14:03

标签: php arrays wordpress

我使用WP Alchemy类处理一些WordPress代码,我试图将页面模板中使用的元值作为逗号分隔列表进行回忆。但是当WP Alchemy Meta Boxes将值存储到域中时,它们不会以分隔符或空格保存,因此它非常类似于:onetwothreefourfive ...

这是我到目前为止所拥有的:

<?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。 ''$ link ['g2m_via-title']; 。 '';但是,它会导致:Link1,Link 1,Link 2,Link 1,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

1 个答案:

答案 0 :(得分:1)

假设这个数据结构:

$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));