2013-07-17 2 views
2

вопроса я хотел бы спросить здесь:PHP массива последовательного устранение дубликатов в места где массив

Есть в любом случае, что я могу удалить последовательные дубликаты из массива ниже, а только сохраняя первый?

Массив представлен ниже:

$a=array("1"=>"go","2"=>"stop","3"=>"stop","4"=>"stop","5"=>"stop","6"=>"go","7"=>"go","8"=>"stop"); 

То, что я хочу, чтобы иметь массив, содержащий:

$a=array("1"=>"go","2"=>"stop","3"=>"go","7"=>"stop"); 

Любые предложения будут помочь. С уважением.

+0

Почему «3» => «идти», как вы это понимаете? –

+0

было бы "..." 3 "=>" go "," 4 "=>" stop "' вместо '" 3 "=>" go "," 7 "=>" stop ")'? – Sean

+0

да, извините, что это должно было быть «4» => «stop» –

ответ

2

Вы можете просто сделать что-то вроде:

if(current($a) !== $new_val) 
    $a[] = $new_val; 

Предполагая, что вы не манипулируя, что массив между ними вы можете использовать current() это более эффективно, чем подсчет его каждый раз, чтобы проверить значение на count($a)-1

+0

Можете ли вы подробнее рассказать о $ new_val, откуда она взялась? –

+0

'$ new_val' будет значением, которое вы добавляете, например. «stop» или «go» – calcinai

7

Последовательные дубликаты? Я не знаю о родных функциях, но это работает. Ну, почти. Думаю, я понял это неправильно. В моей функции 7 => «go» является дубликатом 6 => «go», а 8 => «stop» - это новое значение ...?

function filterSuccessiveDuplicates($array) 
{ 
    $result = array(); 

    $lastValue = null; 
    foreach ($array as $key => $value) { 
     // Only add non-duplicate successive values 
     if ($value !== $lastValue) { 
      $result[$key] = $value; 
     } 

     $lastValue = $value; 
    } 

    return $result; 
} 
+0

Спасибо, много работал как шарм :) –

+0

+1 для приятного стиля :) –

+0

Приятно слышать, что это помогло ;-) – UrGuardian4ngel

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

  • Нет связанных вопросов^_^