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

Discussion in 'PHP' started by LolFEm, 16 May 2007.

  1. LolFEm

    LolFEm Elder - Старейшина

    Joined:
    8 Sep 2006
    Messages:
    160
    Likes Received:
    52
    Reputations:
    5
    Собственно решил написать скрипт.... и возникли проблемы... подскажите что не так сделал....
    Code:
    <?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(); я знаю... хочу сделать без неё...
     
  2. Ky3bMu4

    Ky3bMu4 Elder - Старейшина

    Joined:
    3 Feb 2007
    Messages:
    487
    Likes Received:
    284
    Reputations:
    42
    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); 
    ?>
    Вроде так.
     
  3. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,194
    Reputations:
    252
    и че ты дал?
    Во-первых не рабочий, во-вторых что изменил?
     
  4. Ch3ck

    Ch3ck Elder - Старейшина

    Joined:
    9 Jun 2006
    Messages:
    1,362
    Likes Received:
    1,157
    Reputations:
    430
    http://il.php.net/manual/ru/function.array-unique.php
     
  5. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,194
    Reputations:
    252
    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));
    ?>
    Вывод:
    Code:
    Array ( [0] => 1 [1] => 2 [2] => 3 )
     
  6. Helios

    Helios Elder - Старейшина

    Joined:
    14 Jan 2007
    Messages:
    414
    Likes Received:
    180
    Reputations:
    103
    PHP:
    for ($i=0$i<count($Massiv);$i++)
    В случае, если $Massiv не изменяется во время работы цикла, нужно делать так:
    PHP:
    $cnt count($Massiv);
    for (
    $i=0$i<$cnt$i++)
    Таким способом мы нехило экономим время работы скрипта, т.к. в первом варианте пересчет количества элементов массива выполнялся при каждом проходе цикла, чем больше количество элементов, тем больше времени это занимает. А так мы считаем только один раз.
     
  7. LolFEm

    LolFEm Elder - Старейшина

    Joined:
    8 Sep 2006
    Messages:
    160
    Likes Received:
    52
    Reputations:
    5
    Isis
    Спасибо. Хороший вариант... проверки на вхождения элемента в массив)

    Helios

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

    Developer Elder - Старейшина

    Joined:
    3 May 2006
    Messages:
    152
    Likes Received:
    25
    Reputations:
    10
    :) Больше нечего написать? Зачем изобретать велосипед, который все равно не будет ездить быстрее? :)
     
  9. Helios

    Helios Elder - Старейшина

    Joined:
    14 Jan 2007
    Messages:
    414
    Likes Received:
    180
    Reputations:
    103
    Когда пишешь вот такие вот "велосипеды", ты тренируешь свой мозг. При этом иногда посещают идеи, которые потом, при создании больших проектов могут пригодиться.