2013-04-21 13 views
7

की सरणी बनाएं, मैं इसे घंटों तक प्राप्त करने का प्रयास कर रहा हूं।दो बहुआयामी सरणी की तुलना करें, फिर केवल अद्वितीय

मैं दो बहुआयामी सरणियों

$newData (
    [0] => Array(
     [id] => 1 
     [name] => John 
     [sex] => male 
    ) 
    [1] => Array(
     [id] => 2 
     [name] => Kenny 
     [sex] => male 
    ) 
    [2] => Array(
     [id] => 3 
     [name] => Sarah 
     [sex] => female 
    ) 
    [3] => Array(
     [id] => 4 
     [name] => George 
     [sex] => male 
    ) 
) 

$oldData (
    [0] => Array(
     [id] => 3 
     [name] => Sarah 
     [sex] => female 
    ) 
    [1] => Array(
     [id] => 4 
     [name] => George 
     [sex] => male 
    ) 
    [2] => Array(
     [id] => 5 
     [name] => Peter 
     [sex] => male 
    ) 
    [3] => Array(
     [id] => 6 
     [name] => Lexi 
     [sex] => female 
    ) 
) 

मैं $ newData और $ oldData तुलना और केवल नए डेटा पहले आम सरणी से पहले यह है कि हड़पने के लिए की जरूरत है।

मेरे $ newData तो हो जाएगा:

$newData (
[0] => Array(
    [id] => 1 
    [name] => John 
    [sex] => male 
) 
[1] => Array(
    [id] => 2 
    [name] => Kenny 
    [sex] => male 
) 

)

मैं array_unique से सब कुछ कोशिश की है, अगर आईडी चाबियाँ की तुलना लेकिन कुछ भी ठीक से काम कर रहा है।

क्या मुझे पहले उन्हें मर्ज करने की ज़रूरत है? उन्हें मानचित्र करें? बह, मुझे नहीं पता, मैं बहुत खो गया हूँ।

किसी भी मदद भयानक

उत्तर

7

मैं सिर्फ एक नेस्टेड foreach पाश करना होगा किया जाएगा। मैं नहीं जानता कि जो प्रोग्रामिंग भाषा आप उपयोग कर रहे हैं, लेकिन यह सोचते हैं कि यह पीएचपी ($):

$tmpArray = array(); 

foreach($newData as $data1) { 

    $duplicate = false; 
    foreach($oldData as $data2) { 
    if($data1['id'] === $data2['id'] && $data1['name'] === $data2['name'] && $data1['sex'] === $data2['sex']) $duplicate = true; 
    } 

    if($duplicate === false) $tmpArray[] = $data1; 
} 

फिर आप $tmpArray चर में वांछित सरणी है। आप पाठ्यक्रम $newData = $tmpArray; बाद में कर सकते हैं।

+0

अपने कोड की प्रतिलिपि, तो क्या मैं वर्तमान में है, यह एक खाली सरणी रिटर्न के लिए महत्वपूर्ण नाम बदलकर जब मैं $ tmpArray – Ryan

+0

print_r एक साथ थोड़ा हेरफेर, यह काम करता है। धन्यवाद। – Ryan

+0

तो आप स्पष्ट रूप से कुछ गलत टाइप किया। अगर मैं इस कोड को यहां आज़माता हूं तो http://pastebin.com/jJgDvLxE मुझे वास्तव में वह सरणी मिलती है जो आप परिणामस्वरूप चाहते थे ... –

1

से ऊपर फिर से शुरू करें जब तक आपको $oldData से पहला तत्व नहीं मिलता है?

$cmp = $oldData[0]; 
$data = array(); 
foreach ($newData as $el) { 
    if ($el['id'] === $cmp['id'] 
     && $el['name'] === $cmp['name'] 
     && $el['sex'] === $cmp['sex']) 
     break; 
    $data[] = $el; 
} 

आपका नया डेटा $data में संग्रहीत किया जाएगा।

+1

अच्छा दृष्टिकोण –

0

इसका उपयोग कैसे करें? thelamborghinistory's उत्तर संशोधित करके,

डुप्लीकेट होने पर गतिशील कुंजी को अनसेट करें।

public function removeDuplicate($oldData, $newData, $key) 
{ 
    $tmpArray = array(); 
    foreach ($newData as $data1) { 
     $duplicate = false; 
     foreach ($oldData as $data2k => $data2v) { 
      if ($data1[$key] === $data2v[$key]) { 
       unset($newData[$data2k]); 
       $duplicate = true; 
      } 
     } 
     if ($duplicate === true) { 
      $tmpArray[] = $data1; 
     } else { 
      $tmpArray[] = $data1; 
     } 
    } 
    return $tmpArray; 
} 

और फिर तुम सिर्फ कॉल करने के लिए है,

removeDuplicate($oldData, $newData, 'name');//or whatever you want 
संबंधित मुद्दे