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

Статус
В этой теме нельзя размещать новые ответы.

bunny

Постоялец
Регистрация
17 Мар 2007
Сообщения
66
Реакции
4
Есть аналогичный массив:
PHP:
$array = array( 
0 => array( 
  0 => 'text1', 
  1 => 'text2'), 
1 => array( 
  0 => 'text1_text123', 
  1 => 'text2_text456'),
2 => array( 
  0 => 'text1_text123', 
  1 => 'text2'),
.
.
.
.
.
n=>array( 
  0 => 'textn_text123', 
  1 => 'textn2_text456')
);

Как удалить все повторяющиеся значения?
 
Если array_unique не поможет, то прогонять весь массив и рекурсивно внутренние массивы. Добавлять в какойто временный массив элементы исходного массива, а если во временном уже есть такое значение, то удалять из ихсходного.
 
Вот код, должен работать:
PHP:
$array = array(  
0 => array(  
  0 => 'text1',  
  1 => 'text2'),  
1 => array(  
  0 => 'text1_text123',  
  1 => 'text2_text456'), 
2 => array(  
  0 => 'text1_text123',  
  1 => 'text2'), 
3=>array(  
  0 => 'textn_text123',  
  1 => '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);
 
Или такой вариант
PHP:
$array = array(  
0 => array(  
  0 => 'text1',  
  1 => 'text2'),  
1 => array(  
  0 => 'text1_text123',  
  1 => 'text2_text456'), 
2 => array(  
  0 => 'text1_text123',  
  1 => 'text2'), 
3=>array(  
  0 => 'textn_text123',  
  1 => '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);
 
ще один вопросик вазник
А как написать функцию для удаления повторяющихся элементов в массиве?
Array[N1][N2]
N1 и N2 мб 50 а мб и 100
 
Извращенцы... array_unique()
 
ще один вопросик вазник

А с первым вопросиком закончено? Спасибо никто не заслужил?

А как написать функцию для удаления повторяющихся элементов в массиве?
Array[N1][N2]
N1 и N2 мб 50 а мб и 100

Массив двумерный (массив массивов). Элементы должны удаляться независимо от того, в строке или колонке обнаружено совпадение? Элементы необходимо именно удалять? (размерности массивов поплывут).
 
Cпасибо -=Xardas=- там поменьше вложенности циклов
jik написал(а):
Массив двумерный (массив массивов). Элементы должны удаляться независимо от того, в строке или колонке обнаружено совпадение? Элементы необходимо именно удалять? (размерности массивов поплывут).

По сути не должен поплыть если удалять когда совпадает полностью строка
 
По сути не должен поплыть если удалять когда совпадает полностью строка

например, был массив 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')
);

такая операция должна быть выполнена над массивом?
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху