2015-04-21 85 views
0

我有Array1爲Wordpress自定義帖子類型提取所有條目,並從另一個表中獲取Array2,以顯示特定用戶是否看到該帖子類型。如果Array1的ID爲,則Array2的PageID相同,則將[Started] & [Finished]字段從Array2添加到Array1。基本上我想組合它們來形成Array3。我用array_combine嘗試了許多不同的解決方案,但無法獲得我期待的結果。使用匹配數組中的字段更新數組

Array1 ( 
[0] => stdClass Object ([ID] => 75 [post_title] => Test Training Video) 
[1] => stdClass Object ([ID] => 80 [post_title] => Test 2) 
[2] => stdClass Object ([ID] => 85 [post_title] => Test 2)) 

Array2 ( 
[0] => stdClass Object ([PageID] => 75 [Started] => 1 [Finished] => 1) 
[0] => stdClass Object ([PageID] => 80 [Started] => 1 [Finished] => 0)) 

Array3 ( 
[0] => stdClass Object ([ID] => 75 [post_title] => Test Training Video [Started] => 1 [Finished] => 1) 
[1] => stdClass Object ([ID] => 80 [post_title] => Test 2 [Started] => 1 [Finished] => 0) 
[2] => stdClass Object ([ID] => 85 [post_title] => Test 2)) 
+0

包括你對這個問題的嘗試以及任何來自這些嘗試的錯誤。 – Epodax

+0

有沒有可能在SQL級別上使用JOIN執行而不是合併數組?這可能是更好的解決方案。 – Stepashka

+0

Stepashka,在大多數情況下,加入將是一件壞事,並沒有完美的解決方案:) –

回答

1

是這樣的?

$array3 = array(); 
foreach($array1 as $arr1) 
{ 
    foreach($array2 as $arr2) 
    { 
     if($arr1["ID"] == $arr2["PageID"]) 
     { 
     $array3[] = array($arr1["Started"], $arr2["Finished"]); 
     } 
    } 
} 
+0

沒有太多的其他解決方案。 唯一的另一種方法是通過array_map調用將「PageID」鍵重新映射爲「ID」,並在兩個數組上使用array_merge_recursive()。 – Flunch

0

array_combine()不是正確的功能。

你的情況,你需要使用foreach循環來遍歷你的第一個數組的值,並將它們與你的第二個數組進行比較。

您也需要重新安排陣列2,這樣就可以使用的pageID關鍵方便地訪問了startedfinished值:

$pageMap = array(); 
foreach($array2 as $entry) { 
    $pageMap[$entry['PageID']] = array('started' => $entry['Started'], 'finished' => $entry['Finished']); 
} 

然後,你可以這樣做:

$combined_array = array(); 
foreach($array1 as $post) { 
    if(!isset($pageMap[$post['ID']])) continue; // do nothing if there are no started/finished entries. 
    $combined_array[$post['ID']] = array_merge($post, $pageMap[$post['ID']]); 
} 
0

你可以嘗試第一個循環以使陣列「ID」匹配,然後組合兩個陣列

foreach($array2 as $key=>$value) 
    { 
     $value['ID'] = $value['PageId']; 
     unset($value['PageId']); 
     $array2[$key] = $value; 
    } 

$array3 = array_merge_recursive($array1,$array2); 
+0

如果您可以在兩個查詢中的任何一個上使用SQL ALIAS來確保兩側的「ID」鍵相同,然後只使用array_merge_recursive – Flunch

0

嘗試發佈的解決方案後,我決定在$ wpdb-> get_results sql語句中進行更改,而不是使用2個不同的sql語句,然後組合2個不同的數組。在這篇文章的幫助下 - SQL query to join two tables despite the other table may not have values,我能夠使用以下內容來獲得所需的結果。

$oneBigQuery = $wpdb->get_results("SELECT a.ID, a.post_title, b.PageID, b.Started, b.Finished 
FROM $wpdb->posts AS a 
LEFT JOIN exampleTableName AS b 
    ON a.ID = b.PageID 
    AND b.UserID = 3 
WHERE a.post_type = 'custom-post-type' 
    "); 
相關問題