2012-03-12 76 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