动态<li> </li>用于新闻自动收录器

时间:2019-02-21 08:35:14

标签: javascript php html json wordpress

嗨,我正在从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条记录,

    但是我的股票报价中<li的计数范围为0-10
    它将仅获取3条记录,其余的<li>将打印空的新闻行情记录
    所以:我只想动态创建<li>
    即json标题的数量= <li>的数量
    以我为例,它将是x,因此它将生成<li> X xtimes

  • 3 个答案:

    答案 0 :(得分:1)

    使用此:

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

    答案 1 :(得分: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袭击后的威胁
    •     
    • 我们要克什米尔,但不要克什米尔人:奇丹巴拉姆指出了“令人沮丧的反讽”
    •     
    • 新鲜的降雪,山体滑坡关闭了斯利那加-贾木高速公路

    在发表评论后再次阅读问题,我认为我误会了。列表中最多有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 :(得分:0)

    如果您要循环十次,但也请确保不要打印空白列表项目,则可以尝试以下操作:

    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])时打印。

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