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

123
siv1987
На сайте с 02.04.2009
Offline
427
#11
siv1987:
У in_array очевидно сравнение не так.

Хотя нет, у array_unique то же сравнение.

Очевидно ТС что-то мутит, или регистр у него разный

[Удален]
#12

Решение Вашей задачи


<?php
$arr = array(
array('Благовещенск', 'Якутск'),
array('Благовещенск', 'Хабаровск'),
array('Благовещенск', 'Якутск'),
);
$newArray = array();
foreach( $arr as $nestedArr ){
$newArray = array_merge($newArray, $nestedArr );
}
$newArray = array_unique($newArray);
print_r( $newArray );
Joker-jar
На сайте с 26.08.2010
Offline
171
#13
siv1987:
Очевидно ТС что-то мутит, или регистр у него разный

Видимо. Или trim'ать надо дополнительно.

ТС, откуда вообще данные берутся? Может, проще на этапе получения данных это дело обрабатывать.

siv1987
На сайте с 02.04.2009
Offline
427
#14
teent:
Решение Вашей задачи

А ТС что хочет получить, уникальные значения или уникальные блоки массива?

J
На сайте с 08.06.2006
Offline
844
#15

siv1987, одно но

в массиве

array('Благовещенск', 'Якутск') один раз и array('Якутск','Благовещенск'), и так все остальные одинаковые

---------- Добавлено 12.03.2014 в 19:07 ----------

siv1987:
А ТС что хочет получить, уникальные значения или уникальные блоки массива?

уникальные подмассивы многомерного массива

[Удален]
#16
siv1987:
А ТС что хочет получить, уникальные значения или уникальные блоки массива?

Насколько я понял, уникальные значения. В последнем примере как раз на выходе это и получаем.

Если же уникальные блоки, то необходимо воспользоваться функцией, которую раздобыли на php.net

Можно загнать код выше в функцию


function nestedArrayUnique( $ar ){
$newArray = array();
foreach( $arr as $nestedArr ){
$newArray = array_merge($newArray, $nestedArr );
}
return array_unique( $newArray );
}
J
На сайте с 08.06.2006
Offline
844
#17
teent:
Решение Вашей задачи

<?php
$arr = array(
array('Благовещенск', 'Якутск'),
array('Благовещенск', 'Хабаровск'),
array('Благовещенск', 'Якутск'),
);
$newArray = array();
foreach( $arr as $nestedArr ){
$newArray = array_merge($newArray, $nestedArr );
}
$newArray = array_unique($newArray);
print_r( $newArray );

результат только array('Благовещенск', 'Хабаровск'),

---------- Добавлено 12.03.2014 в 19:11 ----------

teent:
Насколько я понял, уникальные значения. В последнем примере как раз на выходе это и получаем.
Если же уникальные блоки, то необходимо воспользоваться функцией, которую раздобыли на php.net

Можно загнать код выше в функцию

function nestedArrayUnique( $ar ){
$newArray = array();
foreach( $arr as $nestedArr ){
$newArray = array_merge($newArray, $nestedArr );
}
return array_unique( $newArray );
}

уникальные подмассивы нужны

это дает уникальные елементы

на входе

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

на выходе

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

array('Благовещенск', 'Якутск'),

array('Якутск', 'Благовещенск'),

считаем равными массивами

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

Тогда мой вариант с небольшой доработкой:

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

foreach ($arr as $item)
{
$finded = false;
foreach ($newarr as $newitem)
{
if ( ($item[0] == $newitem[0] && $item[1] == $newitem[1]) || ($item[0] == $newitem[1] && $item[1] == $newitem[0]) )
{
$finded = true;
break;
}
if ( ! $finded ) $newarr[] = $item;
}
}
J
На сайте с 08.06.2006
Offline
844
#19
Joker-jar:
Тогда мой вариант с небольшой доработкой:

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

$newarr = array();

foreach ($arr as $item)
{
$finded = false;
foreach ($newarr as $newitem)
{
if ( ($item[0] == $newitem[0] && $item[1] == $newitem[1]) || ($item[0] == $newitem[1] && $item[1] == $newitem[0]) )
{
$finded = true;
break;
}
if ( ! $finded ) $newarr[] = $item;
}
}

результат "пусто"

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

А, косяк. Условие не в то место всунул.

<?php

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

foreach ($arr as $item)
{
$finded = false;
foreach ($newarr as $newitem)
{
if ( ($item[0] == $newitem[0] && $item[1] == $newitem[1]) || ($item[0] == $newitem[1] && $item[1] == $newitem[0]) )
{
$finded = true;
break;
}
}
if ( ! $finded ) $newarr[] = $item;
}

print_r($newarr);

?>
123

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