删除二维数组php中的连续值

时间:2016-06-23 10:12:03

标签: php arrays

我在下面有以下数组:

$array = array(
  '90' => array (
     '11:00' => array(
     '    dept' => 297
      ),
     '11:01' => array(
         'dept' => 297
      ),
     '11:02' => array(
     '    dept' => 884
      ),
     '11:03' => array(
         'dept' => 297
      ),
   ),
  '91' => array (
     '11:00' => array(
       'dept' => 297
      ),
     '11:01' => array(
       'dept' => 297
      ),
   )
);

90和91是用户ID。现在在90和91键内我想删除连续值,例如dept 297它应该只返回一次。 我想要的输出是:

$array = array(
  '90' => array (
     '11:00' => array(
        'dept' => 297
       ),
      '11:02' => array(
     '    dept' => 884
      ),
     '11:03' => array(
         'dept' => 297
      ),
  ),
 '91' => array (
    '11:00' => array(
       'dept' => 297
     ),
  )
);

如你所见,dept id 297只返回一次。

我尝试了以下代码:

function filterSuccessiveDuplicates($array)
{
  $result = array();
   $lastValue = null;
   foreach ($array as $arr =>$value){
      $value = array_values($value);
        foreach($value as $k => $v){

          if ($v['dept'] !== $lastValue) {
            $result[$arr][$k] = $v;
          }
          $lastValue = $v['dept'];
      }
   }
   return $result;
}
 print_r(filterSuccessiveDuplicates($array));

但它不起作用。输出不是我想要的。有什么帮助吗?

1 个答案:

答案 0 :(得分:1)

你只需要将$ lastValue保留在第一个循环中。然后删除array_values()

function filterSuccessiveDuplicates($array)
{
    $result = array();
    foreach ($array as $arr =>$value){
        $lastValue = null;
        foreach($value as $k => $v){

            if ($v['dept'] !== $lastValue) {
                $result[$arr][$k] = $v;
            }

            $lastValue = $v['dept'];
        }
    }
    return $result;
}
print_r(filterSuccessiveDuplicates($array));

我测试了它..效果很好。

这是输出。

Array
(
    [90] => Array
        (
            [11:01] => Array
                (
                    [dept] => 297
                )

            [11:02] => Array
                (
                    [    dept] => 884
                )

            [11:03] => Array
                (
                    [dept] => 297
                )

        )

    [91] => Array
        (
            [11:00] => Array
                (
                    [dept] => 297
                )

        )

)