2012-10-01 154 views
0

這是一個自定義的Wordpress頁面,但我認爲應該使用基本的數組原則。我還沒有用過複雜的數組,因此有點迷路,試驗和錯誤還沒有奏效。將一個數組添加到同一個循環中的另一個數組

我有一個帖子的數據庫,每個帖子都有'shop'和'expired'的meta_key。 'expired'是一個日期(YYYY-MM-DD),用於告訴訪問者郵件的內容何時到期,並且此密鑰是我正在嘗試使用的。

如果郵政的「過期」日期是今天之前,他們都表示「優惠已過期」

如果「到期」日期是在將來,他們顯示(這個腳本「要約在X天后到期」不在下面顯示,不需要)

帖子按其「過期」日期,ASC順序列出。問題是,當一篇文章過期時,我想讓這篇文章在最後顯示,而不是留在最前面。什麼我目前看到

例子:

Post 1 | Expired 3 days ago 
Post 2 | Expired 1 day ago 
Post 3 | Expires in 2 days 
Post 4 | Expires in 6 days 

而且想什麼,我看到(注意郵X順序):

Post 3 | Expires in 2 days 
Post 4 | Expires in 6 days 
Post 2 | Expired 1 day ago 
Post 1 | Expired 3 days ago 

這是我已經嘗試我的陣列碼合併這兩個

$postid = get_the_ID(); 
$meta1 = get_post_meta($postid, 'shop', true); 
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 
$today = date('Y-m-d', time()); 

$args = array(
'post_type' => 'post', 
'meta_query' => array(
    array(
     'key' => 'shop', 
     'value' => $meta1 
    ) 
), 
'paged' => $paged, 
'posts_per_page' => '5', 
'meta_key' => 'expired', 
'meta_value' => $today, 
'meta_compare' => '>', 
'orderby' => 'meta_value', 
'order' => 'ASC' 
); 

$args2 = array(
'post_type' => 'post', 
'meta_query' => array(
    array(
     'key' => 'shop', 
     'value' => $meta1 
    ) 
), 
'meta_key' => 'expired', 
'meta_value' => $today, 
'meta_compare' => '<', 
'orderby' => 'meta_value', 
'order' => 'DESC' 
); 

$final = $args + $args2; 
$query = new WP_Query($final); 

while ($query->have_posts()) : $query->the_post(); ?> 
HTML FOR DISPLAYING POST 
endwhile; 

目前它似乎沒有采取任何「$ args2」的通知,只顯示$ args

我確定我的想法是正確的,需要創建兩個數組並使用「+」而不是array_merge()將它們連接起來,但這是我無法再深入的地方。

請問有人請好嗎?謝謝!

+0

[array_merge](http://www.php.net/manual/en/function.array-merge.php)有什麼問題?我沒有想出任何使用'+'操作符合併到數組中?你能提供一些關於這方面的信息嗎? –

+0

我在http://php.net/manual/en/function.array-merge.php使用「+」運算符的示例3的提示,如果我使用array_merge(),那麼「args2」會覆蓋「args」因爲他們共享密鑰名稱。 我的目標拆分查詢的結果: (1),具有後日期>今日(主動) (2)其他有側柱日期<今日(過期) 然後,我想顯示符合條件的一面(1)的帖子,然後在尊重分頁(post_per_page => 5)的同時在其下方顯示(2)的帖子。 –

+0

你可以用var_dump格式分享你想要的數組嗎?無論如何,這個信息是有用的:) –

回答

0

如果我正確理解您的要求,現在您試圖實現的解決方案實際上是不可能的。讓我解釋爲什麼這是不可實現的。

在你的兩個數組$args$args2大部分值相同留下兩個賠率,我選擇只有一個,只是舉例說明:

//it's in args  
'meta_compare' => '>' 
//it's in args2 
'meta_compare' => '<' 

現在,當你試圖這兩使用array_merge($args , $args2)合併發生了什麼:

'meta_compare' => '<' 

這意味着它是從後面的陣列,其是$args2這裏採取「meta_compare」。這是array_merge函數在文檔中定義的行爲:如果您使用+陣列聯合運營$args+$args2

If the input arrays have the same string keys, then the later value for that key will overwrite the previous one

現在:

'meta_compare' => '>' 

這意味着它從第一考慮「meta_compare」數組這是$args這裏。這是+陣列聯合運營商在文檔中定義的行爲:

The keys from the first array will be preserved. If an array key exists in both arrays, then the element from the first array will be used and the matching key's element from the second array will be ignored.

爲什麼它在同級別鍵必須是唯一的因爲發生。因此,在你的情況他們是在同一水平線上:

$args = array ('key' => 'value1') 
$args2= array ('key' => 'value2') 

所以僅只有一個值可以存在這裏作爲合併陣列「鑰匙」可以點只有一個

如果是這樣的情景:

$args [0] = array ('key' => 'value1') 
$args2 [1]= array ('key' => 'value2') 

然後通過二者存儲key的價值將被resrved。這將是導致數組:

array(2) { 
    [0]=> 
    array(1) { 
    ["key"]=> 
    string(6) "value1" 
    } 
    [1]=> 
    array(1) { 
    ["key"]=> 
    string(6) "value2" 
    } 
} 

我雖然不是WP的一個怪胎,但據我從WP_query理解你不能通過ARGS像這樣(我不知道)。因此,只有一種方法可以實現這一點。您可以單獨傳遞這兩個參數,並將結果合併爲最有可能的結果(我不確定)將是一個2D數組,您可以輕鬆地將它們合併。

希望有所幫助。 快樂編碼:)

+0

這是一個奇妙的幫助,非常感謝解釋。您的解決方案建議也是有道理的,所以我將開始測試並查看我的位置。如果我得到我需要的東西,將會更新這個。再次感謝。 –

+0

最後,我重新組織了顯示這些帖子的頁面,並分別調用兩個數組 - 給出了稍微不同的結果,但其中一個我其實很滿意。再次感謝你,讓我朝更好的方向發展。 –

+0

很高興聽到它幫助它;) –

0

您不能只使用args + args2語法將2個數組一起添加。 PHP無法知道你的意思。如果你想要得到的結果是包含這兩個數組的數組,你可以這樣做:

$最終=陣列(的$ args,$ args2)

,否則我不知道你怎麼想這兩個陣列組合。如果你澄清他們需要如何組合,我們可能會幫助更多。

+0

查看我上面的評論,我正在尋找將查詢結果拆分爲已過期的帖子和未來日期的「過期」帖子。然後,我需要首先在頁面頂部顯示所有未過期的帖子,一旦耗盡,然後在第二個數組上開始一個while循環以顯示過期的帖子。 –

+0

我對數組的+運算符進行了更正,但在您的情況下,+運算符不應該執行任何操作。 args2中的所有鍵已經存在於args中,所以它們不會被覆蓋。你能給我們一些你想要的最後的東西嗎? – mdd061000

相關問題