douce1368
douce1368
2011-12-20 10:02

PHP:计算数组中的项目,将总数除以2,创建两个UL列表,其中包含来自数组的项目的相同数量的元素

已采纳

I have an array containing data (ID numbers and data associated with them).

The number of items in the array is always variable and not known.

I want to split this array in two equal parts IF there's more than 2 items in the original array (not the slice).

Then I want to create two indipendent UL lists containing the resulting array slices items. If the total number of items in the original array is odd, the first list should carry one more item.

I came up with this, but I'm sure I'm doing it wrong... the content shown in the output is almost the same for each UL list, just reordered, plus in my case the number is odd (if I echo $items it comes up with 3.5).

  $panels = get_field('related_content');
  $items = count($panels);
  if ($items > 2) {
      $split = $items / 2;
      $firsthalf = array_slice($panels, $plit );
      $secondhalf = array_slice($panels, 0, $plit);
      echo '<div class="related-carousel"><ul>'; 
      foreach($firsthalf as $post_object) :
              printf('<li><a target="_blank" title="'.get_the_title($post_object->ID).'" href="'.get_permalink($post_object->ID).'"><span class="thumb">'.get_the_post_thumbnail($post_object->ID, 'smallest').'</span><span class="thumb-title"><h6>'.get_the_title($post_object->ID).'</h6></span></a><span>'.sg_get_the_excerpt().'</span></li>');
      endforeach;
      echo'</ul></div>';
      echo '<div class="related-carousel"><ul>'; 
     foreach($secondhalf as $post_object) :
             printf('<li><a target="_blank" title="'.get_the_title($post_object->ID).'" href="'.get_permalink($post_object->ID).'"><span class="thumb">'.get_the_post_thumbnail($post_object->ID, 'smallest').'</span><span class="thumb-title"><h6>'.get_the_title($post_object->ID).'</h6></span></a><span>'.sg_get_the_excerpt().'</span></li>');
     endforeach;
     echo'</ul></div>';
  }
  else {
        echo '<div class="related-carousel"><ul>';  
        foreach($panels as $post_object) :
                printf('<li><a target="_blank" title="'.get_the_title($post_object->ID).'" href="'.get_permalink($post_object->ID).'"><span class="thumb">'.get_the_post_thumbnail($post_object->ID, 'smallest').'</span><span class="thumb-title"><h6>'.get_the_title($post_object->ID).'</h6></span></a><span>'.sg_get_the_excerpt().'</span></li>');
        endforeach;
        echo'</ul></div>';
  }
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

3条回答

  • drl959975 drl959975 10年前

    You need to change the argument $plit of array_slice into $split! It's always useful to turn on error reporting which helps with such errors: error_reporting(E_ALL).

    Could be you need to change your $split variable, e.g. by using ceil(), edit: look at AndVla answer

    点赞 评论 复制链接分享
  • doudi5892 doudi5892 7年前

    tim is right, however you also probably want the firsthalf to be the first half of the array, not vise-versa like you have it now. This is because slice arguments are: $output = array_slice($input, $offset, $length);. So you'll want to set your variables like this $firsthalf = array_slice($panels, 0, $split); $secondhalf = array_slice($panels, $split, $items);

    Cheers

    点赞 评论 复制链接分享
  • dpd7122 dpd7122 10年前

    Think you can solve the problem like that:

    $split = ($items+1) / 2;
    

    or

    $split = ceil($items / 2);
    
    点赞 评论 复制链接分享

相关推荐