【问题标题】:How remove last comma on php?如何删除php上的最后一个逗号?
【发布时间】:2012-09-23 20:38:09
【问题描述】:

我有一个编辑过的 Supersized...我在 wp 上添加了一个关于照片的循环代码......

所以我在原版上有这个:

slides : [
                                                    {image : 'http://buildinternet.s3.amazonaws.com/projects/supersized/3.2/slides/shaden-2.jpg', title : 'Image Credit: Brooke Shaden', thumb : 'http://buildinternet.s3.amazonaws.com/projects/supersized/3.2/thumbs/shaden-2.jpg', url : 'http://www.nonsensesociety.com/2011/06/brooke-shaden/'},
                                                    {image : 'http://buildinternet.s3.amazonaws.com/projects/supersized/3.2/slides/shaden-3.jpg', title : 'Image Credit: Brooke Shaden', thumb : 'http://buildinternet.s3.amazonaws.com/projects/supersized/3.2/thumbs/shaden-3.jpg', url : 'http://www.nonsensesociety.com/2011/06/brooke-shaden/'}
                                        ],

我已经从 wp 编辑了循环库:

slides : [

                    <?php query_posts('cat=46'); ?> 
                    <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>     
                        <?php
                            $thumb = get_post_meta($post->ID,'_thumbnail_id',false);
                            $thumb = wp_get_attachment_image_src($thumb[0], false);
                            $thumb = $thumb[0];
                        if ( has_post_thumbnail() ) { ?>
                                {image : '<?php echo $thumb; ?>'},
                    <?php } ?>
                    <?php endwhile; else: ?>
                    <?php endif; ?>
                    <?php wp_reset_query(); ?>
                    ],

它适用于 Chrome、Firefox 等...

但我在 IE 8 - 7 和旧版 Firefox 上遇到此警报的问题:

消息:'slides[...].url' 为空或不是对象

行:23

字符:3

代码:0

URI:supersized.3.0.js

我听说真正的问题是最后一个逗号(你可以在这篇文章的第一个代码中看到,没有......而且它工作得很好。

所以我想解决删除已编辑幻灯片上的最后一个逗号...因为它在一张一张的图像上重复 comme,它会导致这个问题出现在即... 我怎样才能删除最后一个逗号?

【问题讨论】:

  • 首先,代码中的第三个 PHP 块缺少结束 ?&gt;
  • @BrandonMiller 它在if ( has_post_thumbnail() ) { ?&gt; 的末尾只是糟糕的格式

标签: php wordpress slideshow supersized


【解决方案1】:

您为什么不断地进出 PHP?效率太低了……

slides : [ 
    <?php
    query_posts('cat=46');
    if ( have_posts() ) {
        $post_array = Array();
        while ( have_posts() ) {
            the_post();
            $thumb = get_post_meta($post->ID,'_thumbnail_id',false); 
            $thumb = wp_get_attachment_image_src($thumb[0], false); 
            $thumb = $thumb[0]; 
            if ( has_post_thumbnail() ) {
                $post_array[] = "{image : '".$thumb."'}";
            } 
        }
        echo implode(",",$post_array);
    }
    wp_reset_query();
    ?>
], 

【讨论】:

  • 出于好奇,您能解释一下为什么这种编码效率低吗?
  • 它抛出了不必要的令牌。我不知道 PHP 是如何工作的,但它对它没有好处。
  • 每次在一行关闭php,在下一行打开,就相当于加了一个print语句,打印一个换行符和一堆空格。这也使您的代码很难遵循。 Kolink 的版本更容易阅读!而且他的版本在最终输出中产生了更少的意外空白。
【解决方案2】:

您确定问题与最后一次昏迷有关吗?如果是,您需要将所有图像保存在一个变量中,在循环结束时去掉最后一个昏迷并打印结果:

<?php $string = ''; ?>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>     
                    <?php
                        $thumb = get_post_meta($post->ID,'_thumbnail_id',false);
                        $thumb = wp_get_attachment_image_src($thumb[0], false);
                        $thumb = $thumb[0];
                    if ( has_post_thumbnail() ) { ?>
                <?php  $string.= '{image : '.$thumb.'},';
                <?php } ?>
                <?php endwhile; ?>
                <?php echo substr($string, -1); ?>

【讨论】:

    【解决方案3】:

    3 个解决方案:

    一个:

    <?php if ( have_posts() ) : $i=0; while ( have_posts() ) : the_post(); ?>     
                            <?php
                                $thumb = get_post_meta($post->ID,'_thumbnail_id',false);
                                $thumb = wp_get_attachment_image_src($thumb[0], false);
                                $thumb = $thumb[0];
                            if ( has_post_thumbnail() ) { ?>
                                    <?=($i>0?',':'')?>{image : '<?php echo $thumb; ?>'}
                        <?php  } $i++;?>
    

    两个:

     <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>     
                                <?php
                                    $thumb = get_post_meta($post->ID,'_thumbnail_id',false);
                                    $thumb = wp_get_attachment_image_src($thumb[0], false);
                                    $thumb = $thumb[0];
                                if ( has_post_thumbnail() ) { ?>
                                        $string[]="{image : '<?php echo $thumb; ?>'}";
                            <?php } if (!empty($string)) implode(",",$string);
    

    树:

         <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>     
                                    <?php
                                        $thumb = get_post_meta($post->ID,'_thumbnail_id',false);
                                        $thumb = wp_get_attachment_image_src($thumb[0], false);
                                        $thumb = $thumb[0];
                                    if ( has_post_thumbnail() ) { ?>
                                            $string.="{image : '<?php echo $thumb; ?>'}";
                                <?php } $lenght=strlen($string)-2;
    echo substr($string,0,$lenght);
    

    在我看来,第二种解决方案是最干净的。

    【讨论】:

      【解决方案4】:

      为什么不用json 组成幻灯片数组

      <?php 
      $slide_arr = array ();
      
      query_posts('cat=46'); 
      if ( have_posts() ) : 
        while ( have_posts() ) : the_post();     
          $thumb = get_post_meta($post->ID,'_thumbnail_id',false);
          $thumb = wp_get_attachment_image_src($thumb[0], false);
          $thumb = $thumb[0];
          if ( has_post_thumbnail() ) { 
            $slideObj = new stdClass;
            $slideObj->image = $thumb; 
            $slide_arr[] = $slideObj;
          } 
        endwhile; 
      else: 
      endif; 
      wp_reset_query(); 
      
      $slide_json = json_encode($slide_arr);
      ?>
      
      var slide_json = '<?php echo $slide_json; ?>';
      var slide_arr  = eval('(' + slide_json + ')');
      // js code ...
      
      slides : slide_arr,
      

      【讨论】:

        【解决方案5】:

        在 JS 对象数组中尾随逗号是有效的,所以逗号不是你的问题。引发此错误是因为您尚未为幻灯片对象设置 URL 属性。这是您当前输出的 JSON 字符串:

        {image : 'http://buildinternet.s3.amazonaws.com/projects/supersized/3.2/slides/shaden-2.jpg'}
        

        但您需要像这样的幻灯片的完整对象:

        {image : 'http://buildinternet.s3.amazonaws.com/projects/supersized/3.2/slides/shaden-2.jpg', title: 'YOUR TITLE HERE', thumb: 'SOME IMAGE PATH GOES HERE', url: 'SOME URL PATH GOES HERE'}
        

        更新:

        人们似乎认为逗号存在某种问题。我不认为这是主要问题。它可能会导致问题(我认为不会),但除此之外,如果不抛出他在问题中提到的错误,这些人的代码将永远无法工作。我直接去了超大来源,向大家展示了问题所在。

        var imageLink = (options.slides[options.slides.length - 1].url) ? "href='" + options.slides[options.slides.length - 1].url + "'" : "";
        

        就是这样。在第 23 行,正如他的错误消息所说。该脚本正在尝试访问每个幻灯片对象的 URL 属性。但他没有设置 URL 属性。所以它总是会抛出用户所说的错误。

        【讨论】:

        • 虽然它有效的 javascript,但 MSIE 不接受它。因此,尾随的逗号实际上 他的问题的根源。 stackoverflow.com/questions/7246618/… -- 另外,严格的 JSON not 允许尾随逗号! stackoverflow.com/questions/201782/…
        • 我认为你错了。这是小提琴jsfiddle.net/AvbL3/3。注意它在 IE7/8 中是如何工作的。请注意,调用不存在的属性是行不通的。
        • 是的,抱歉,MSIE 和尾随逗号存在问题,但主要问题正是您所说的。道歉!
        猜你喜欢
        • 1970-01-01
        • 2011-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-03
        相关资源
        最近更新 更多