【问题标题】:Comparing Next element inside foreach loop in associate array比较关联数组中foreach循环内的下一个元素
【发布时间】:2021-02-05 17:20:11
【问题描述】:

我正在尝试访问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',
  )
)

【问题讨论】:

  • ($key+1) 是一个整数值,所以($key+1)['date'] 会报错。尝试$array[$key + 1][$date] 并小心最后一次迭代。
  • 没错,那么我该如何比较呢?

标签: php arrays associative-array


【解决方案1】:

我不知道你从哪里得到$date 你需要'date',而且你没有在$c 分配中的任何地方使用$array。它可以缩短,但使用您的代码,只需检查 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';
    }
}

【讨论】:

    猜你喜欢
    • 2023-03-26
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-17
    相关资源
    最近更新 更多