2012-03-12 77 views
0

我有一個foreach語法比較不同的項目,其產生以下結果:在不同陣列

array 
    0 => 
    array 
     'value' => string '2012-05-09T12:00:00' (length=19) 
     'value2' => string '2012-05-09T15:00:00' (length=19) 
     'timezone' => string 'Europe/Paris' (length=12) 
     'timezone_db' => string 'UTC' (length=3) 
     'date_type' => string 'date' (length=4) 
    1 => 
    array 
     'value' => string '2012-03-14T13:00:00' (length=19) 
     'value2' => string '2012-03-14T16:00:00' (length=19) 
     'timezone' => string 'Europe/Paris' (length=12) 
     'timezone_db' => string 'UTC' (length=3) 
     'date_type' => string 'date' (length=4) 
    2 => 
    array 
     ... 
array 
    0 => 
    array 
     'value' => string '2012-02-08T13:00:00' (length=19) 
     'value2' => string '2012-02-08T16:00:00' (length=19) 
     'timezone' => string 'Europe/Paris' (length=12) 
     'timezone_db' => string 'UTC' (length=3) 
     'date_type' => string 'date' (length=4) 
    1 => 
    array 
     'value' => string '2012-03-14T13:00:00' (length=19) 
     'value2' => string '2012-03-14T16:00:00' (length=19) 
     'timezone' => string 'Europe/Paris' (length=12) 
     'timezone_db' => string 'UTC' (length=3) 
     'date_type' => string 'date' (length=4) 
    2 => 
    array 
     ... 

...代表更大量的代碼,全部採用相同的結構。

這裏是php代碼:

foreach ($result as $term) { 
    $node = node_load($term->nid); 
    $dates = $node->field_date['und']; 
    var_dump($dates); 
} 

目標是比較的結果,並檢查他們的任何不平等。那麼,我的目標是一個腳本,讓我從第一陣列和第二陣列$dates[0]['value']比較$dates[0]['value'] ...

我想所有的0項目或全部1項目組成新陣列後來檢查他們,但迄今沒有運氣。有人有另一個想法嗎?

回答

1
$array[] = array(
    'value'  => '2012-03-14T13:00:00', 
    'value2'  => '2012-03-14T16:00:00',  // <--- Error 
    'timezone' => 'Europe/Paris', 
    'timezone_db' => 'UTC', 
    'date_type' => 'date', 
); 
$array[] = array(
    'value'  => '2012-03-14T13:00:00a',  // <--- Error 
    'value2'  => '2012-03-14T16:00:00', 
    'timezone' => 'Europe/Paris', 
    'timezone_db' => 'UTC', 
    'date_type' => 'date', 
); 
$array[] = array(
    'value'  => '2012-03-14T13:00:00', 
    'value2'  => '2012-03-14T16:00:00tt', // <--- Error 
    'timezone' => 'Europe/Paris', 
    'timezone_db' => 'UTC', 
    'date_type' => 'date11', 
); 

$errors = array(); 
for($i=0; $i < count($array)-1; $i++) 
    $errors = array_merge(array_diff_assoc($array[$i], $array[$i+1])); 

var_dump($errors); 

/* Output 
* ------ 
* Array 
* (
*  [value] => 2012-03-14T13:00:00a 
*  [value2] => 2012-03-14T16:00:00 
*  [date_type] => date 
*) 
*/ 
+0

謝謝你在解決這個謎題的過程中的耐心和毅力:) – Michiel 2012-03-12 16:01:50

2
$array = array(); 

$array[] = array(
    'value'  => '2012-03-14T13:00:00', 
    'value2'  => '2012-03-14T16:00:00', 
    'timezone' => 'Europe/Paris', 
    'timezone_db' => 'UTC', 
    'date_type' => 'date', 
); 
$array[] = array(
    'value'  => '2012-03-14T13:00:00', 
    'value2'  => '2012-03-14T16:00:00dddd',  // <--- Error is here 
    'timezone' => 'Europe/Paris', 
    'timezone_db' => 'UTC', 
    'date_type' => 'date', 
); 
$array[] = array(
    'value'  => '2012-03-14T13:00:00', 
    'value2'  => '2012-03-14T16:00:00', 
    'timezone' => 'Europe/Paris', 
    'timezone_db' => 'UTC', 
    'date_type' => 'date', 
); 

if(count($array) > 1) 
{ 
    $error = false; 
    $keyCount = count($array); 

    for($i=0; $i < $keyCount-1; $i++) 
    { 
     foreach($array[$i] as $key=>$val) 
     { 
      if($array[$i+1][$key] != $val) 
      { 
       $error = $key; 
       break; 
      } 
     } 
    } 
} 

if($error) 
    echo "Error key = " . $error; 
else 
    echo "No errors"; 



輸出:Error key = value2

編輯:改變以反映問題的新認識。

+0

謝謝!但我有一個未定義的數組數...所以可能有一個,但他們可能是5甚至6 ... – Michiel 2012-03-12 12:23:20

+0

你將不得不有一個嵌套的foreach循環,我錯過了那一點。但是創建一個新數組然後通過foreach運行它會更有效率。 – Bradmage 2012-03-12 12:23:28

+0

哦對。是的,這使得它更棘手。 – Bradmage 2012-03-12 12:24:21

0

我覺得這是一種

$array1 = array('marko','aca','milos'); 
$array2 = array('nemanja','marko','milos'); 
for($i=0;$i<count($array2);$i++)//count any array 
{ 
if($array1[$i]!=$array2[$i]) 
{ 
    echo "Error in ".$i." <br/>";/*it will show you a number of part of array wich don't match */ 
} 
} 

這會給
錯誤在0
錯誤1個

+1

謝謝,但與其他答案相同的評論。我有一個未定義的數組數。所以也許有3個數組,另一次會有5個數組,... – Michiel 2012-03-12 12:37:14

+0

我認爲這樣你就會有你需要的東西。把你的數組,而不是我的,並在if循環比較$ array1 [$我] ['值']與array2 [$我] ['值']而不是我的。 – 2012-03-12 12:39:04

+0

你可以計算主數組(所有數組的父數組,你知道我的意思嗎? – 2012-03-12 12:40:27