Удалить повторяющиеся элементы в массиве

Статус
В этой теме нельзя размещать новые ответы.
не в моем случае он буит
PHP:
$a = array( 
    array('aaa1', 'bbb2', 'ccc1'), 
    array('aaa2', 'bbb', 'bbb'), 
    array('aaa3', 'bbb', 'ccc3'), 
    array('aaa41', 'bbb2', 'ссс1') 
    array('aaa1', 'bbb', 'ccc1'), 
    array('aaa2', 'bbb', 'bbb'), 
    array('aaa3', 'bbb', 'ccc3'), 
    array('aaa41', 'bbb2', 'ссс1') 
);

и станет

PHP:
$a = array( 
    array('aaa1', 'bbb2', 'ccc1'), 
    array('aaa2', 'bbb', 'bbb'), 
    array('aaa3', 'bbb', 'ccc3'), 
    array('aaa41', 'bbb2', 'ссс1') 
    array('aaa1', 'bbb', 'ccc1'), 
    array('aaa2', 'bbb', 'bbb'), 
    array('aaa3', 'bbb', 'ccc3'), 
);

но массив моожет быть и рекурсивным так и ассоциативным
 
например, был массив array[0..3][0..2]
PHP:
$a = array(
    array('aaa1', 'bbb', 'ccc1'),
    array('aaa2', 'bbb', 'bbb'),
    array('aaa3', 'bbb', 'ccc3'),
    array('aaa4', 'bbb', 'bbb')
);

стал:
PHP:
$a = array(
    array('aaa1', 'ccc1'),
    array('aaa2'),
    array('aaa3', 'ccc3'),
    array('aaa4')
);

такая операция должна быть выполнена над массивом?


Попробуй мой вариант может он тебе больше понравится он оставляет одну запись 'bbb'. :smmne:
 
тон я не знаю размерности многомерного массива ни в первом ни во втором варианте ето не прокатит а за первый пост спасибо очень помогли
 
алгоритм удаления повторяющихся элементов массива:
Берем 0-й элемент массива. Если за этим элементом (т.е. начиная с 1-го) где-то в массиве есть еще один такой же элемент i, то элемент i удаляем.

Берем 1-й элемент массива. Если за этим элементом (т.е. начиная с 2-го) где-то в массиве есть еще один такой же элемент i, то элемент i удаляем.

Берем n-й элемент массива. Если за этим элементом (т.е. начиная с n+1) где-то в массиве есть еще один такой же элемент i, то элемент i удаляем.


PHP:
function values_equal($a1, $a2) {
  $result = false;
  if (is_array($a1)) {
    if (is_array($a2)) {
      // оба массивы
      $result = !count(array_diff_assoc($a1,$a2)) and
                !count(array_diff_assoc($a2,$a1)) and
                !count(array_diff($a1,$a2)) and
                !count(array_diff_assoc($a2,$a1));
    }
  } else {
    if (!is_array($a2)) {
      // оба не массивы
      $result = ($a1 === $a2);
    }
  }
  return($result);
}


$a = array(  
    array('aaa1', 'bbb2', 'ccc1'),  
    array('aaa2', 'bbb', 'bbb'),  
    array('aaa3', 'bbb', 'ccc3'),  
    array('aaa41', 'bbb2', 'ссс1'),
    array('aaa1', 'bbb', 'ccc1'),  
    array('aaa2', 'bbb', 'bbb'),  
    array('aaa3', 'bbb', 'ccc3'),  
    array('aaa41', 'bbb2', 'ссс1')  
); 

$max = count($a);
for($i = 0; $i < $max; $i++) {
  if (is_array($a[$i])) {
    for($j = $i+1; $j < $max; $j++) {
      if (values_equal($a[$i],$a[$j])) {
echo "i=$i j=$j arrays are equal<br>";
        unset($a[$j]);
      }
    }
  }
}
print_r($a);

Результат работы:

Код:
Array ( 
  [0] => Array ( 
    [0] => aaa1 
    [1] => bbb2 
    [2] => ccc1 ) 
  [1] => Array ( 
    [0] => aaa2 
    [1] => bbb 
    [2] => bbb ) 
  [2] => Array ( 
    [0] => aaa3 
    [1] => bbb 
    [2] => ccc3 ) 
  [3] => Array ( 
    [0] => aaa41 
    [1] => bbb2 
    [2] => ссс1 ) 
  [4] => Array ( 
    [0] => aaa1 
    [1] => bbb 
    [2] => ccc1 )
)
 
Jik грац а то я всю ночь потратил и че то не смог у мя уже просто голова опухла и попросил помощи
P.S. тему мона закрывать.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху