【问题标题】:Use PHP implode + array to return a comma separated list?使用 PHP 内爆 + 数组返回逗号分隔的列表?
【发布时间】:2011-08-27 12:14:03
【问题描述】:

我正在使用 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

【问题讨论】:

  • $link['g2m_via-title']的值是多少?
  • $link['g2m_via-title'] 究竟包含什么?
  • 抱歉,$link['g2m_via-title'] 包含链接的名称(即链接 1)。
  • 你能给出var_dump($link);的输出吗?所以我可以知道它是如何存储的。
  • array(2) { ["g2m_via-title"]=> string(7) "JoyStiq" ["g2m_via-link"]=> string(22) "joystiq.com" } JoyStiq 数组(2) { ["g2m_via-title"]=> 字符串(9) "GrindGadget" ["g2m_via-link"]=> 字符串(16) "grindgadget.com" } GrindGadget 数组(2) { ["g2m_via-title "]=> string(13) "Engadget" ["g2m_via-link"]=> string(13) "engadget.com" } Engadget ^这就是您要找的吗?

标签: php arrays wordpress


【解决方案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));

【讨论】:

  • 其实我还是保持了上面的结构,暂时还可以。但我肯定会看看你的代码现在是否有效(逗号分隔)。
猜你喜欢
  • 1970-01-01
  • 2017-11-13
  • 2013-07-03
  • 1970-01-01
  • 1970-01-01
  • 2017-01-14
  • 2023-03-16
  • 2012-06-05
  • 1970-01-01
相关资源
最近更新 更多