Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Выбрка значений из массива без повторений... (https://forum.antichat.xyz/showthread.php?t=40153)

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 код:


<?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

Цитата:

Сообщение от Ky3bMu4
PHP код:


<?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

PHP код:

function my_array_unique(&$old){
    
$new = array();
    foreach(
$old as $key => $value){
        if(!
in_array($value$new)) $new[$key] = $value;
    }
    return 
$new;
}
?> 

Пример:
PHP код:

<?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

PHP код:

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

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

$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

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


Время: 17:52