2012-10-23 177 views
0

好的。我有2個數組。一個是原始數據,另一個是新數據。他們之間可能有匹配的值。我需要做的,是從新的入站數組中找出什麼是新的,什麼是匹配,什麼不匹配。現在我整天都在編寫代碼,所以我覺得在這種狀態下邏輯是有道理的,但並不是那麼光禿禿的。PHP比較兩個數組,並有三個結果集,匹配和不匹配的結果集

最終目標是我需要這3個數組,其中一個項目從原始項目中刪除,一個項目是新項目,然後是與新項目中的任何項目匹配的原始條目。

林正在思考的事情,以3個空白數組來填充,因爲我循環在原來的或新的循環和比較他們添加每個類型舊,新,刪除相應的數組,所以我可以工作之後的結果。我可以在腦海中拼湊一個適用於2個陣列的想法作爲輸出,但是我失去了第三個陣列。所以我現在有點擔心這一點。尋找建議和/或幫助創建一個循環或更好的東西,將產生我期待的3組結果。

編輯在概念陣列將來自數據庫

陣列原始數據:入站新數據的

Array(
     15, 
     22, 
     100, 
     1500, 
     2000, 
     500, 
     3000, 
     1101 
    ) 

陣列

Array(
     100, 
     800, 
     920, 
     1500, 
     2000, 
     1603, 
     500, 
     3000, 
     1101 
    ) 

陣列原始和之間預期的匹配入境新品:

Array(
     100, 
     1500, 
     2000, 
     500, 
     3000, 
     1101 
    ) 

陣列之間預期的「新」條目的原始和新:

Array(
     100, 
     800, 
     920, 
     1603 
    ) 

陣列預計條目從舊不原始和新之間的匹配:

Array(
     15, 
     22 
    ) 

它可能不是現貨,因爲我顯然只是用手輸入這些......但希望它能證明我在某種程度上試圖達到什麼

+1

您可以添加輸入數據和預期的輸出數據嗎?它將有助於回答你的問題。 – Alex

+2

查看PHP函數'array_diff'和'array_intersect'。 – Barmar

+0

@AlexJoyce,已更新。 Barmar,我會看看是否有幫助,謝謝 – chris

回答

2

Barmar的評論我s正確,array_diffarray_intersect是你想要的。在你的問題中你有一個錯字,但是在匹配和新值數組中都會出現「100」。

<?php 
$orig = array(15, 22, 100, 1500, 2000, 500, 3000, 1101); 
$post = array(100, 800, 920, 1500, 2000, 1603, 500, 3000, 1101); 

// Gets things in both arrays 
$matches = array_intersect($orig, $post); 
// Gets things in $post that aren't in $orig 
$new  = array_diff($post, $orig); 
// Gets things in $orig that aren't in $post 
$removed = array_diff($orig, $post); 

foreach (array($orig, $post, $matches, $new, $removed) as $array) { 
    print_r($array); 
} 

我的猜測......你處理複選框或多種選擇,以確定哪些保留,哪些要添加什麼刪除。

+0

,先生真棒,謝謝。Barmar建議我研究這些功能,我只是通過它們閱讀它們。謝謝。 – chris

相關問題