1

我有一个while循环运行,可以抓取我网站上的所有帖子

while ( $all_query->have_posts() ) : $all_query->the_post();

每个都有我需要使用的元数据。这是一个名为的字段'rate',我需要合并类似的值,1-5。

目前,我有这个

while ( $all_query->have_posts() ) : $all_query->the_post();
    $fives = 0;
    $fours = 0;
    $threes = 0;
    $twos = 0;
    $ones = 0;
    if(get_post_meta($post->ID, 'rate', true) == 'five') { 
        $fives = $fives + 5;
    }
    if(get_post_meta($post->ID, 'rate', true) == 'four') { 
        $fours = $fours + 4;
    }
    if(get_post_meta($post->ID, 'rate', true) == 'three') { 
        $threes = $threes + 3;
    }
    if(get_post_meta($post->ID, 'rate', true) == 'two') { 
        $twos = $twos + 2;
    }
    if(get_post_meta($post->ID, 'rate', true) == 'one') { 
        $ones = $ones + 1;
    }
    endwhile;

它有效,但它真的很恶心。

有没有更优化和更干净的方式来做这样的事情?

4

1 回答 1

4

一点点数组操作可以大大简化这一点:

$counts = array_fill(1, 5, 0);
$labels = array(1 => 'one', 'two', 'three', 'four', 'five');

while(...) {
    $index = array_search(get_post_meta($post->ID, 'rate', true), $labels);
    $counts[$index] += $index;
}

总数保存在里面$counts$counts[1]是总数。$labels是否可以帮助将文本表示与内部的数组位置相匹配$counts——这当然可以用纯文本来完成switch

该循环用于array_search将文本表示转换为数组索引,然后简单地将相应的计数增加等于索引的数量。

生产代码当然也应该考虑array_search返回的可能性false

于 2013-01-17T23:43:59.080 回答