【问题标题】:Dynamic <li></li>for news ticker [duplicate]动态 <li></li> 用于新闻自动收报机 [重复]
【发布时间】:2019-07-15 02:23:12
【问题描述】:

嗨,我正在从 wordpress 网站获取 JSON 数据并将标题转换为

  • 如下:
    <?php $get=file_get_contents("https://www.thekashmirmonitor.net/wp-json/wp/v2/posts?categories=192");
    $var=json_decode($get);
    $km=array();
    foreach($var as $data)
    { $km[]=$data->title->rendered;} ?>
    

    在获取标题即时打印输出后确定

    <div class="section-container">
    <div class="bn-breaking-news" id="newsTicker5">
    <div class="bn-label">#News:</div>
    <div class="bn-news">
        <ul>
    
                                 <li>&nbsp;<?php echo $km[0]; ?>&nbsp;</li>
                                 <li>&nbsp;<?php echo $km[1]; ?>&nbsp;</li>
                                 <li>&nbsp;<?php echo $km[2]; ?>&nbsp;</li>
                                 <li>&nbsp;<?php echo $km[3]; ?>&nbsp;</li> 
                                 <li>&nbsp;<?php echo $km[4]; ?>&nbsp;</li> 
                                 <li>&nbsp;<?php echo $km[5]; ?>&nbsp;</li> 
                                 <li>&nbsp;<?php echo $km[6]; ?>&nbsp;</li> 
                                 <li>&nbsp;<?php echo $km[7]; ?>&nbsp;</li> 
                                 <li>&nbsp;<?php echo $km[8]; ?>&nbsp;</li>
                                 <li>&nbsp;<?php echo $km[9]; ?>&nbsp;</li>
                                 <li>&nbsp;<?php echo $km[10]; ?>&nbsp;</li>
    </ul>
    </div>
    <div class="bn-controls">
        <button><span class="bn-arrow bn-prev"></span></button>
        <button><span class="bn-action"></span></button>
        <button><span class="bn-arrow bn-next"></span></button>
    </div>
    

    假设 JSON 结果只有 3 条记录,

    但我的代码有 &lt;li 计数从 0 到 10
    它将仅获取 3 条记录,其余的 &lt;li&gt; 将打印空新闻代码
    SO:我想要的只是动态创建&lt;li&gt;
    即 json 标题编号 = 编号 OF &lt;li&gt;
    在我的情况下,它会是 x,所以它会生成 &lt;li&gt; X xtimes

  • 【问题讨论】:

    • 你问题的最后一段有点不清楚。当有 3 个新闻时,您是否只想打印 3 个
    • ?是这个问题吗?
  • 是的,我想根据 json 数据打印
  • 标签: javascript php html json wordpress


    【解决方案1】:

    这个问题似乎有点不清楚,但我相信您希望为每个标题显示一个li 元素并且没有任何空的 li 元素? 遍历数组并随时添加li 元素是一项非常简单的任务。

    $url='https://www.thekashmirmonitor.net/wp-json/wp/v2/posts?categories=192';
    $json=json_decode( file_get_contents( $url ) );
    echo '<ul>';
    foreach( $json as $obj )printf('<li>%s</li>',$obj->title->rendered);
    echo '</ul>';
    

    这将输出

    • IVR 研究所对 3 名克什米尔女孩对军队的“不利言论”采取行动
    • 5 人因袭击西孟加拉邦的克什米尔商人而被捕
    • 孟加拉国首都化学品仓库发生大火,造成 69 人死亡
    • SC 将于明天听取 Pulwama 袭击后保护克什米尔人免受威胁的请求
    • 我们想要克什米尔,但不是克什米尔人:奇丹巴拉姆指出“令人沮丧的讽刺”
    • 新降雪、山体滑坡关闭了斯利那加-查谟高速公路

    在 cmets 之后再次阅读问题,我认为我误解了。列表中最多有 10 个项目,但如果结果应该少于 10 个,则菜单不应显示空 li 元素...?

    修改了上述内容并包装在一个函数中,您只需要为该提要提供 ID 以及可选的最大计数。

    function createlist( $id, $max=10 ){
        $url=sprintf( 'https://www.thekashmirmonitor.net/wp-json/wp/v2/posts?categories=%d', $id );
        $json=json_decode( file_get_contents( $url ) );
    
        if( !empty( $json ) ){
            $html=[];
            $html[]=sprintf('<ul data-feed=%d>',$id );
            foreach( $json as $i => $obj ){
                if( $i < $max )$html[]=sprintf( '<li>%s</li>',$obj->title->rendered );
            }
            $html[]='</ul>';
        }
        return implode( PHP_EOL, $html );
    }
    
    $ticker_max_count=10;
    
    echo createlist( 190, $ticker_max_count );
    echo createlist( 191, $ticker_max_count );
    echo createlist( 192, $ticker_max_count );
    

    【讨论】:

      【解决方案2】:

      使用这个:

      <div class="bn-news">
      <ul>
      <?php
           foreach($km as $value) {
                echo "<li>" . $value . "</li>";
           }
      ?>
      </ul>
      </div>
      

      【讨论】:

      • 仅此一项不会设置循环中的最大执行次数为 10 次。固定计数器和条件可以解决问题
      【解决方案3】:

      如果您想循环十次,但还要确保不打印空列表项,您可以尝试以下操作:

      for ($i = 0; $i <= 9; $i++) {
         if (isset($km[$i])) { 
             echo "<li>&nbsp $km[$i] &nbsp</li>\n";
         } else {
             exit;
         }
      }
      

      如果至少存在 10 个项目,这将打印项目 10 次,但如果索引不存在,它将退出循环。

      另一种方法是使用 foreach:

      foreach ($km as $key=>$value) {
         if ($key < 10) { 
             echo "<li>&nbsp $value &nbsp</li>\n";
         } else {
             exit;
         }
      }
      

      它检查每个项目的密钥,并且仅在密钥小于 10 ($km[0] - $km[9]) 时打印。

      这两种解决方案的代码量大致相同,应该可以满足您的要求。我真的不能说一个比另一个更好

      【讨论】:

        猜你喜欢
        相关资源
        最近更新 更多
        热门标签