【问题标题】:How to echo just few names of a list, in a clean way如何以干净的方式回显列表的几个名称
【发布时间】:2021-12-20 03:30:42
【问题描述】:

我正在使用以下代码列出每个帖子的长列表的前 7 个名称。问题是当某个帖子包含低于 7 的名称列表时,对于每个缺失的名称直到 7,它会自动打印一个逗号','

因此,当名称为 7 或更多时,它会正确显示: “名称 1,名称 2,名称 3,名称 4,名称 5,名称 6,名称 7” 例如,如果它只包含 3 个名称,它将打印: "name1, name2, name3,,,,"

有没有在代码中添加一些东西来排除打印逗号以防 7 次以下的名称?

<?php
$value = get_post_meta($post->ID, 'list_of_names', true);
$value_array = explode(',', $value);
$hrefs = []; 
for($i = 0; $i < 7; $i++)
{
    $remove_space = str_replace(' ', '-', $value_array[$i]);
    $url = esc_url('myblogurl' . $remove_space);
    if ('' !== $url)
    {
        $display = esc_html($value_array[$i]);
        $hrefs[] = "<a href='$url'>$display</a>";
    }
}
echo implode(",", $hrefs);
?>

我一直在尝试在末尾添加elseif($i &lt; 6) { echo ',';,但它报告了系统错误语法:(

有什么建议吗?

【问题讨论】:

  • if ('' !== $url) 在这里是一个无用的检查,它将始终评估为真,因为您在上面的行中将该变量设置为非空。如果你的名字少于 7 个,这也应该抛出一些 Undefined index-warnings。

标签: javascript php database


【解决方案1】:

将循环限制为 $value_array 的大小,同时保持 7 的限制。

for ($i = 0, $count = count($value_array); $i < 7 && $i < $count; $i++)

相同想法的另一种编码方式:

for ($i = 0, $min = min(7, count($value_array)); $i < $min; $i++)

【讨论】:

    【解决方案2】:

    你有一个数组中的“值”,所以你可以使用数组函数。

    <?php
    
    $values = get_post_meta($post->ID, 'list_of_names', true);
    $value_array = explode(',', $values);
    $hrefs = []; 
    foreach (array_slice($value_array,0,7) as $value)
    {
        $remove_space = str_replace(' ', '-', $value);
        $url = esc_url('myblogurl' . $remove_space);
        if ('' !== $url)
        {
            $display = esc_html($value);
            $hrefs[] = "<a href='$url'>$display</a>";
        }
    }
    echo implode(",", $hrefs);
    
    ?>
    

    见:array_slice()

    如果您希望其他人了解您的代码的含义,我建议您使用除 value 之外的其他名称作为变量名。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-08
      • 2018-12-12
      相关资源
      最近更新 更多