我正在运行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;
它有效,但它真的很糟糕。
是否有更优化和干净的方法来做这样的事情?
答案 0 :(得分: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
的可能性。