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

Тема в разделе "PHP", создана пользователем bunny, 12 апр 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. bunny

    bunny Постоялец

    Регистр.:
    17 мар 2007
    Сообщения:
    66
    Симпатии:
    4
    Есть аналогичный массив:
    PHP:
    $array = array( 
    => array( 
      
    => 'text1'
      
    => 'text2'), 
    => array( 
      
    => 'text1_text123'
      
    => 'text2_text456'),
    => array( 
      
    => 'text1_text123'
      
    => 'text2'),
    .
    .
    .
    .
    .
    n=>array( 
      
    => 'textn_text123'
      
    => 'textn2_text456')
    ); 
    Как удалить все повторяющиеся значения?
     
  2. itex

    itex

    Регистр.:
    15 ноя 2007
    Сообщения:
    274
    Симпатии:
    64
    Если array_unique не поможет, то прогонять весь массив и рекурсивно внутренние массивы. Добавлять в какойто временный массив элементы исходного массива, а если во временном уже есть такое значение, то удалять из ихсходного.
     
  3. -=Xardas=-

    -=Xardas=-

    Регистр.:
    17 сен 2008
    Сообщения:
    250
    Симпатии:
    58
    Вот код, должен работать:
    PHP:
    $array = array(  
    => array(  
      
    => 'text1',  
      
    => 'text2'),  
    => array(  
      
    => 'text1_text123',  
      
    => 'text2_text456'), 
    => array(  
      
    => 'text1_text123',  
      
    => 'text2'), 
    3=>array(  
      
    => 'textn_text123',  
      
    => 'textn2_text456'
    ); 
    foreach(
    $array as $key => $sub_arr) {
        
    $array1[$key "|0"] = $sub_arr[0];
        
    $array1[$key "|1"] = $sub_arr[1];

    $array1 array_unique($array1);
    unset(
    $array);
    foreach(
    $array1 as $key => $ss) {
        
    $key explode("|"$key);
        
    $array[$key[0]][] = $ss;

    print_r($array);
     
    bunny нравится это.
  4. Ton

    Ton Постоялец

    Регистр.:
    20 май 2007
    Сообщения:
    55
    Симпатии:
    9
    Или такой вариант
    PHP:
    $array = array(  
    => array(  
      
    => 'text1',  
      
    => 'text2'),  
    => array(  
      
    => 'text1_text123',  
      
    => 'text2_text456'), 
    => array(  
      
    => 'text1_text123',  
      
    => 'text2'), 
    3=>array(  
      
    => 'textn_text123',  
      
    => 'textn2_text456'
    );  

    foreach (
    $array as $key1 => &$level1) {
        foreach (
    $level1 as $key2 => &$val1) {
            foreach (
    $array as $key21 => &$level2) {
                foreach (
    $level2 as $key22 => &$val2) {
                    if (
    $val1 == $val2 && ($key1 != $key21 || ($key1 == $key21 && $key2 != $key22))) {
                        unset(
    $array[$key21][$key22]);
                    }
                    if (!
    count($array[$key21])) {
                        unset(
    $array[$key21]);
                    }
                }
            }
        }
    }
    print_r($array);
     
    bunny нравится это.
  5. bunny

    bunny Постоялец

    Регистр.:
    17 мар 2007
    Сообщения:
    66
    Симпатии:
    4
    ще один вопросик вазник
    А как написать функцию для удаления повторяющихся элементов в массиве?
    Array[N1][N2]
    N1 и N2 мб 50 а мб и 100
     
  6. ewg777

    ewg777

    Регистр.:
    6 авг 2007
    Сообщения:
    763
    Симпатии:
    321
    Извращенцы... array_unique()
     
  7. bunny

    bunny Постоялец

    Регистр.:
    17 мар 2007
    Сообщения:
    66
    Симпатии:
    4
    просто так $array = array_unique($array); не прокатит так как вернет только первую запись так все ключи одинаковые
     
  8. jik

    jik

    Регистр.:
    11 мар 2009
    Сообщения:
    243
    Симпатии:
    133
    А с первым вопросиком закончено? Спасибо никто не заслужил?

    Массив двумерный (массив массивов). Элементы должны удаляться независимо от того, в строке или колонке обнаружено совпадение? Элементы необходимо именно удалять? (размерности массивов поплывут).
     
  9. bunny

    bunny Постоялец

    Регистр.:
    17 мар 2007
    Сообщения:
    66
    Симпатии:
    4
    Cпасибо -=Xardas=- там поменьше вложенности циклов
    По сути не должен поплыть если удалять когда совпадает полностью строка
     
  10. jik

    jik

    Регистр.:
    11 мар 2009
    Сообщения:
    243
    Симпатии:
    133
    например, был массив 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')
    );
    такая операция должна быть выполнена над массивом?
     
Статус темы:
Закрыта.