doukanmang3687 2011-08-27 12:14
浏览 84
已采纳

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

I working on some WordPress code with the WP Alchemy class, and I'm trying to recall the meta values used in a page template as a comma separated list. However when WP Alchemy Meta Boxes store the values into the domain, they aren't saved with delimiters nor spaces, so it's much like: onetwothreefourfive...

Here's what I have so far:

<?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'] is simply the name of the link that is stored in the meta field, i.e. Link1 would be the name, google,,com would be the link (which is not important here, I have that working). The other variables are all there. The $prefix variable does nothing, it was meant to act as a separator, like: $val .= $prefix . '' $link['g2m_via-title']; . ''; however, it causes: Link1, Link 1,Link 2, Link 1, Link 2, Link 3.

So far with that code, I've gotten the closest to what I want:

Link1Link2Link3

But it needs to be: Link1, Link2, Link3, and so on without the comma on the last link title.

Output of 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

What I WANT it to look like so ["g2m_via-title"] will stop duplicating:

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 of the countless other pieces of code that I've tried: http://pastebin.com/wa0R8sDw.

  • 写回答

1条回答 默认 最新

  • douyuben9434 2011-08-27 15:06
    关注

    Assuming this data structure:

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

    This'll do:

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

    So will this in 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));
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 一道python难题
  • ¥15 用matlab 设计一个不动点迭代法求解非线性方程组的代码
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题
  • ¥15 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度