Получить уникальные элементы-массивы массива

12 3
J
На сайте с 08.06.2006
Offline
844
3608

Есть массив

Array

(
[] => Array
(
[0] => Благовещенск
[1] => Якутск
)

[1] => Array
(
[0] => Благовещенск
[1] => Хабаровск
)

[2] => Array
(
[0] => Благовещенск
[1] => Владивосток
)

[3] => Array
(
[0] => Благовещенск
[1] => Чита
)

[4] => Array
(
[0] => Благовещенск
[1] => Иркутск
)

[5] => Array
(
[0] => Благовещенск
[1] => Екатеринбург
)

[6] => Array
(
[0] => Благовещенск
[1] => Москва
)

[7] => Array
(
[0] => Благовещенск
[1] => Новосибирск
)

[8] => Array
(
[0] => Хабаровск
[1] => Токио
)

[9] => Array
(
[0] => Хабаровск
[1] => Сеул
)

[10] => Array
(
[0] => Хабаровск
[1] => Якутск
)

[11] => Array
(
[0] => Хабаровск
[1] => Благовещенск
)

[12] => Array
(
[0] => Хабаровск
[1] => Магадан
)

[13] => Array
(
[0] => Хабаровск
[1] => Петропавловск
)

[14] => Array
(
[0] => Хабаровск
[1] => Владивосток
)

[15] => Array
(
[0] => Хабаровск
[1] => Чита
)

[16] => Array
(
[0] => Хабаровск
[1] => Иркутск
)

[17] => Array
(
[0] => Хабаровск
[1] => Краснодар
)

[18] => Array
(
[0] => Хабаровск
[1] => Екатеринбург
)

[19] => Array
(
[0] => Хабаровск
[1] => Москва
)

[20] => Array
(
[0] => Хабаровск
[1] => Бангкок
)

[21] => Array
(
[0] => Хабаровск
[1] => Новосибирск
)

[22] => Array
(
[0] => Хабаровск
[1] => Красноярск
)

[23] => Array
(
[0] => Хабаровск
[1] => Анадырь
)

[24] => Array
(
[0] => Владивосток
[1] => Токио
)

[25] => Array
(
[0] => Владивосток
[1] => Сеул
)

Как получить все уникальные подмассивы

Array
(
[0] => город1
[1] => город2
)

п.с. php (array_unique не проходит)

siv1987
На сайте с 02.04.2009
Offline
427
#1

Что мешает сделать обход массива и записать в отдельный массив уникальные значения?

J
На сайте с 08.06.2006
Offline
844
#2
siv1987:
Что мешает сделать обход массива и записать в отдельный массив уникальные значения?

Да я уже не знаю как

Уже три часа разные способы пробую

---------- Добавлено 12.03.2014 в 18:30 ----------

siv1987, черкни "шаблон"

спасибо!

Joker-jar
На сайте с 26.08.2010
Offline
171
#3

"На коленке" (не проверял):

$arr = array(/* исходный массив */);
$newarr = array();

foreach ($arr as $item)
{
$finded = false;
foreach ($newarr as $newitem)
{
if ( $item[0] == $newitem[0] && $item[1] == $newitem[1] ) //Возможно, вкатит просто $item == $newitem
{
$finded = true;
break;
}
if ( ! $finded ) $newarr[] = $item;
}
}


---------- Добавлено 13.03.2014 в 01:37 ----------

З.Ы. Когда уже починят это недоразумение с квадратными скобками
siv1987
На сайте с 02.04.2009
Offline
427
#4


$arr = array(
array(1,2),
array(1,3),
array(1,2),
);
$res = array();

foreach($arr as $v){
/* is unique */
if(! in_array($v, $res)){
$res[] = $v;
}
}
print_r($res);
Joker-jar
На сайте с 26.08.2010
Offline
171
#5
siv1987:

$arr = array(
array(1,2),
array(1,3),
array(1,2),
);
$res = array();

foreach($arr as $v){
/* is unique */
if(! in_array($v, $res)){
$res[] = $v;
}
}
print_r($res);

in_array нормально отрабатывает значения-массивы? Странно, что тогда array_unique нет (если верить ТСу)

siv1987
На сайте с 02.04.2009
Offline
427
#6
Joker-jar:
Странно, что тогда array_unique нет

array_unique
Замечание: Два элемента считаются одинаковыми в том и только в том случае, если (string) $elem1 === (string) $elem2.

У in_array очевидно сравнение не так.

J
На сайте с 08.06.2006
Offline
844
#7
siv1987:

$arr = array(
array(1,2),
array(1,3),
array(1,2),
);
$res = array();

foreach($arr as $v){
/* is unique */
if(! in_array($v, $res)){
$res[] = $v;
}
}
print_r($res);

как было на старте 516 элементов так и есть

и на глаз вижу одинаковые

[Удален]
#8

Joker-jar, посмотрите функцию ниже, такие решения давно уже реализованы, достаточно тривиальны. Как я понимаю, сделали Вы для текущей задачи, но зачем тогда два раза прогнали цикл. Можно было ведь одним объединить все внутренние массивы. А после - array_unique. Разве нет?

http://www.php.net/manual/ru/function.array-unique.php#97285

Передаете функции массив, на выходе новый с уникальными параметрами.


<?php
function super_unique($array)
{
$result = array_map("unserialize", array_unique(array_map("serialize", $array)));

foreach ($result as $key => $value)
{
if ( is_array($value) )
{
$result[$key] = super_unique($value);
}
}

return $result;
}
?>
siv1987
На сайте с 02.04.2009
Offline
427
#9


$arr = array(
array('Благовещенск', 'Якутск'),
array('Благовещенск', 'Хабаровск'),
array('Благовещенск', 'Якутск'),
);

Глазами вижу результат


Array
(
[0] => Array
(
[0] => Благовещенск
[1] => Якутск
)

[1] => Array
(
[0] => Благовещенск
[1] => Хабаровск
)
)

Не знаю, может быть в разных версиях массивы сравниваются по другому (ну может быть)

J
На сайте с 08.06.2006
Offline
844
#10
teent:
$result***91;$key***93

на звездочки матерится

12 3

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий