2013-01-17 69 views
1

我有我的網站上while循環優化一點點

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

一個while環運行,抓住所有的帖子出現在每個上,我需要打的元數據。這是一個名爲'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; 

它的工作原理,但它確實總值。

有沒有更優化的和乾淨的方式做這樣的事情?

+1

聽起來像是'之開關的工作。 – Mike

+0

你想平均比率嗎? – Supericy

+0

@Supericy - 基本上,是的。我曾經做過5個獨立的循環,但是這樣變得非常昂貴。所以我想這一切凝結成1環和操縱從一個變量使用 – Xhynk

回答

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的可能性。

+0

非常乾淨,漂亮。 – showdev

+0

啊哈!我的好先生,你真是太棒了。這工作很好!稍微調整一下它**的效果非常出色**,比我以前的清潔更多!謝謝!! :) – Xhynk