PDA

Просмотр полной версии : Выбрка значений из массива без повторений...


LolFEm
16.05.2007, 11:31
Собственно решил написать скрипт.... и возникли проблемы... подскажите что не так сделал....
<?php
$Massiv=array("1","2","3","1","2","3");

for ($i=0; $i<count($Massiv);$i++)
{
$temp[]=$Massiv[0];
for ($j=1;$j<count($Massiv);$j++ )
{
if ($Massiv[$i] !== $Massiv[$j])
$copy[]=$Massiv[$j];
}

$Massiv=$copy;
unset($copy);

}
print_r($temp);
?>

p.s функцию array_unique(); я знаю... хочу сделать без неё...

Ky3bMu4
16.05.2007, 11:55
<?php
$Massiv=array("1","2","3","1","2","3");
$temp[]=$Massiv[0];

for ($i=0; $i<count($Massiv);$i++)
{
for ($j=1;$j<count($Massiv);$j++ )
{
if ($Massiv[$i] !== $Massiv[$j])
$copy[]=$Massiv[$j];
}

$Massiv=$copy;
unset($copy);

}
print_r($temp);
?>


Вроде так.

Isis
16.05.2007, 12:04
<?php
$Massiv=array("1","2","3","1","2","3");
$temp[]=$Massiv[0];

for ($i=0; $i<count($Massiv);$i++)
{
for ($j=1;$j<count($Massiv);$j++ )
{
if ($Massiv[$i] !== $Massiv[$j])
$copy[]=$Massiv[$j];
}

$Massiv=$copy;
unset($copy);

}
print_r($temp);
?>


Вроде так.
и че ты дал?
Во-первых не рабочий, во-вторых что изменил?

Ch3ck
16.05.2007, 12:13
http://il.php.net/manual/ru/function.array-unique.php

Isis
16.05.2007, 12:18
function my_array_unique(&$old){
$new = array();
foreach($old as $key => $value){
if(!in_array($value, $new)) $new[$key] = $value;
}
return $new;
}?>
Пример:
<?php
function my_array_unique(&$old){
$new = array();
foreach($old as $key => $value){
if(!in_array($value, $new)) $new[$key] = $value;
}
return $new;
}
$temp = Array ("1","2","3","1","2","3");
print_r(my_array_unique($temp));
?>
Вывод:
Array ( [0] => 1 [1] => 2 [2] => 3 )

Helios
16.05.2007, 12:49
for ($i=0; $i<count($Massiv);$i++)


В случае, если $Massiv не изменяется во время работы цикла, нужно делать так:

$cnt = count($Massiv);
for ($i=0; $i<$cnt; $i++)


Таким способом мы нехило экономим время работы скрипта, т.к. в первом варианте пересчет количества элементов массива выполнялся при каждом проходе цикла, чем больше количество элементов, тем больше времени это занимает. А так мы считаем только один раз.

LolFEm
16.05.2007, 12:55
Isis
Спасибо. Хороший вариант... проверки на вхождения элемента в массив)

Helios

Спасибо за совет экономии времени выполнения.

Developer
16.05.2007, 19:48
:) Больше нечего написать? Зачем изобретать велосипед, который все равно не будет ездить быстрее? :)

Helios
17.05.2007, 10:31
Когда пишешь вот такие вот "велосипеды", ты тренируешь свой мозг. При этом иногда посещают идеи, которые потом, при создании больших проектов могут пригодиться.