Оставить уникальные массивы.

dima4321

Новичок
Продолжаем углубляться ))

Имею на выходе несколько массивов.


Вот структура массива $m

PHP:
Array 
( 
    [0] => Array 
        ( 
            [0] => 3- 
            [1] => 6- 
            [2] => 9- 
            [3] => 10- 
        ) 

    [1] => Array 
        ( 
            [0] => 3- 
            [1] => 6- 
            [2] => 9- 
            [3] => 10- 
            [4] => 12- 
        ) 

    [2] => Array 
        ( 
            [0] => 3- 
            [1] => 5- 
            [2] => 9- 
            [3] => 15- 
        ) 

)

Т.к. массив $m[0] и $m[1] очень близки по наполнению нужно оставить больший. А именно оставить $m[1];


Задача

Массив будет двухмерным.

Кол-во массивов первого уровня на выходе всегда разное.

Условие для остчеки ненужного массива:

если первые 4 элемента одинаковы оставить тот массив в которм больше значений


т.е.

$m[0]=array(1,3,5,6);
$m[1]=array(1,3,5,6,8);
$m[2]=array(7,8,10,11);
$m[3]=array(7,8,10,11,11);



на выходе хочу только


$m[1]=array(1,3,5,6,8);
$m[3]=array(7,8,10,11,12);


Буду рад любым советам ))
 

Mamont

Новичок
dima4321
Сначала определись что подразумевается под "очень близки по наполнению"
 

ArkDoom

Новичок
PHP:
$result = array_diff ($array1, $array2,$array3,:);

На раздумье для дальнейшего движения...
 

Alien85

I like my cat
так вырежи из каждого массива нужное кол-во элементов и сравнивай их
 

Улугбек

Новичок
PHP:
$m[0]=array(1,3,5,6);
$m[1]=array(1,3,5,6,8);
$m[2]=array(7,8,10,11);
$m[3]=array(7,8,10,11,11); 

for($i=0;$i<=count($m)-1;$i++)
{
if(count($m[$i])<count($m[$i+1]))
{
unset($m[$i]);
}
}
 

Улугбек

Новичок
Улугбек, что это за хрень?
Вы хотели из этого...

PHP:
$m[0]=array(1,3,5,6);
$m[1]=array(1,3,5,6,8);
$m[2]=array(7,8,10,11);
$m[3]=array(7,8,10,11,11);

Получить вот это...
PHP:
$m[1]=array(1,3,5,6,8);
$m[3]=array(7,8,10,11,11);
вот эта "хрень" и есть решение
PHP:
for($i=0;$i<=count($m)-1;$i++)
{
if(count($m[$i])<count($m[$i+1]))
{
unset($m[$i]);
}
}
 

dima4321

Новичок
Улугбек


Получить хотел это....но ведь по другому приницпу. Мне нужен вариант сравнения массивов по наполнению, а не по кол-ву элементов.
 

dima4321

Новичок
Улугбек


Не одна из данных функции мне не подойдет. Уже вчера проверял.
 

Andreika

"PHP for nubies" reader
PHP:
function hashfunc($item) {
	return md5( implode('&', array_slice($item, 0, 4)) );
}

$result = array();
foreach($array as $item) {
   $hash = hashfunc($item);
   if (empty($result[$hash]) || (count($item) > count($result[$hash]))) {
	   $result[$hash] = $item;
   }
}
 
Сверху