2012-06-28 135 views
1

我得到了以下陣列(簡稱...多點意味着它們有數據,這兩個陣列開始在入境1,直到結束。比較兩個多多dimensionals陣列

Array 
(
    [12U_S_136_15_29_141] => Array 
     (
      ..... 

      [35] => Array 
       (
        [stop_sequence] => 35 
        [stop_id] => 1601394 
       ) 

      ..... 

      [46] => Array 
       (
        [stop_sequence] => 46 
        [stop_id] => 122052 
       ) 

      [47] => Array 
       (
        [stop_sequence] => 47 
        [stop_id] => 136208 
       ) 

      [48] => Array 
       (
        [stop_sequence] => 48 
        [stop_id] => 128163 
       ) 

     ) 

    [12U_S_141_57_6_141] => Array 
     (
      [1] => Array 
       (
        [stop_sequence] => 1 
        [stop_id] => 1601394 
       ) 

      ..... 

      [12] => Array 
       (
        [stop_sequence] => 12 
        [stop_id] => 122052 
       ) 

      [13] => Array 
       (
        [stop_sequence] => 13 
        [stop_id] => 136208 
       ) 

      [14] => Array 
       (
        [stop_sequence] => 14 
        [stop_id] => 128163 
       ) 

     ) 

) 

正如你可以看到,這兩個陣列端是平等的...... 35 = 146 = 12,...,48 = 14,通過平等的,我的意思是相同的,但stop_id總是會不同勢爲stop_sequence和課程的數組條目號。

我想要知道我可以如何比較整個陣列與其他陣列,所以我可以知道,在這裏,讓我們假設,第二個數組與100%的第一個數組相匹配(除非我們不尋找stop_sequence,所以這可能是不同的。因此,在這種情況下,兩者將被標記爲「相等」,但是如果假設最後一個條目具有不同的stop_id(條目48將是來自條目14的!=),則該數組將被標記爲「不相等」。

任何人都有一條路可以帶領我?我一直在想,但不知道如何。我tryed array_compare但這含鉛不了了之:\

感謝

編輯 沒有什麼可以改變到數據庫中。此外,數組需要以這種方式創建(使用奇怪的文本,即12U_S_136_15_29_141)。我可以在PHP中做任何事情。

+0

StackOutsource.com :)也許你應該把這兩個數組進行比較,比如{1601643:34,1601643:46,...} – biziclop

+0

@biziclop好主意先生。然後我會循環檢查是否所有的鑰匙都跟着對方? –

+0

在這種形式中,您可以將它們與一些內置函數進行比較,或者簡單地使用==來進行比較。 – biziclop

回答

0

到新陣列獲取stop_id:S和比較古都

這裏是一個有用的功能

function sub_array($array, $sub_key) 
    { 
      $new_array = array(); 
      if(is_array($array) AND $array) 
      { 
        foreach($array as $key => $data) 
        { 
          $new_array[$key] = $data[$sub_key]; 
        } 
      } 
      return $new_array; 
    } 

那麼就比較陣列

if(sub_array($a['12U_S_136_15_29_141'], 'stop_id') == sub_array($a['12U_S_141_57_6_141'], 'stop_id')) 

,或者如果你知道什麼stop_id匹配:

$first_stop_id_list = sub_array($a['12U_S_136_15_29_141'], 'stop_id'); 
$secound_stop_id_list = sub_array($a['12U_S_141_57_6_141'], 'stop_id'); 
$matches = array_intersect($first_stop_id_list, $secound_stop_id_list); 

if(!$matches) 
    echo "No stop_id matches"; 
else if($first_stop_id_list = $secound_stop_id_list) 
    echo "all element was in both"; 
else if($matches == $first_stop_id_list) 
    echo "all element in first was in secound"; 
else if($matches == $secound_stop_id_list) 
    echo "all element in secound was in first"; 
+0

Thakns的功能。但是,我的第二個數組只包含第一個數組的一部分,但會匹配。我想我需要用'stop_id'創建兩個關鍵表並進行比較。它需要保持秩序。 –

+0

PHP有「集合論」的功能,如array_intersect和array_diff –

+0

我不明白你的第一個人,如果與一個平等?交叉點會在相同的位置匹配stop_id嗎? '2012,2013' ='2012,2013' yes但不是'2013,2012' –