Сравнение следующего элемента внутри цикла foreach в ассоциированном массиве

#php #arrays #associative-array

#php #массивы #ассоциативный-массив

Вопрос:

Я пытаюсь получить доступ к следующей паре ключ-значение ассоциированного массива в php, чтобы проверить, совпадает ли следующая пара ключ-значение или нет.

 foreach($array as $key => $value){

    $b = $value['date'];
    $c = ($key 1)['date']; // As ($key 1) is integer value not an array

    if($b == $c){     
     statement        
    }
}

 

Тем не менее, этот подход описан ниже, что кажется логичным.

Исключение ErrorException: попытка получить доступ к смещению массива по значению типа int

Есть ли какой-нибудь способ, которым я мог бы найти следующий элемент внутри foreach цикла в ассоциированном массиве?

 array (
  0 => 
  array (
    'date' => "2019-03-31",
    'a' => '1',
    'b' => '1',
  ),
  1 => 
  array (
    'date' => "2019-04-02",   
    'a' => '1',
    'b' => '1',
  ),
  2 => 
  array (
    'date' => "2019-04-02",  
    'a' => '2',
    'b' => '1',
  )
)
 

Комментарии:

1. ($key 1) является целочисленным значением, поэтому ($key 1)['date'] будет жаловаться. Попробуйте $array[$key 1][$date] и будьте осторожны на последней итерации.

2. Точно, так как же мне сравнить?

Ответ №1:

Я не знаю, что вам $date нужно 'date' , и вы $array нигде не используете в $c назначении. Его можно сократить, но, используя ваш код, просто проверьте next элемент:

 foreach($array as $value) {
    $b = $value['date'];
    $c = next($array)['date'] ?? false;
    
    if($b == $c) {     
        echo 'Yes';
    }
}
 

Если они являются последовательными целочисленными ключами, вы можете сделать это по-своему, просто проверьте, что $key 1 установлено:

 foreach($array as $key => $value) {
    $b = $value['date'];
    $c = $array[$key 1]['date'] ?? false;
    
    if($b == $c) {     
        echo 'Yes';
    }
}