2016-06-23 4 views
0

У меня есть следующий массив ниже:Удалить последовательные значения в двумерном массиве PHP

$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 являются идентификатор пользователя. Теперь внутри клавиши 90 и 91 я хочу удалить последовательное значение, например, отдел 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 идентификатор 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)); 

но не работает. Результат не то, что я хочу. Любая помощь?

+0

useruseruser, что неверно, потому что повтор 297. check once –

ответ

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 
       ) 

     ) 

) 
+0

У меня возник вопрос, почему вы удалили array_values? – useruseruser

+0

@useruseruser это неправильный ответ, потому что повторение 297. проверьте один раз. –

+0

@Anant, 297 не следует повторять последовательно. Правильно прочитайте вопрос. –

Смежные вопросы