У меня есть синтаксис 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, а затем проверить их, но пока безуспешно. У кого-нибудь есть другая идея?

0
Michiel 12 Мар 2012 в 16:09

3 ответа

Лучший ответ
$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
 * )
 */
1
Bradmage 12 Мар 2012 в 15:55
$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

Изменить: изменения, отражающие новое понимание вопроса.

2
Bradmage 12 Мар 2012 в 13:00

Я думаю это способ

$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

0
Marko Vasic 12 Мар 2012 в 12:35