ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > PHP, PERL, MySQL, JavaScript
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Выбрка значений из массива без повторений...
  #1  
Старый 16.05.2007, 11:31
LolFEm
Участник форума
Регистрация: 08.09.2006
Сообщений: 194
Провел на форуме:
1627025

Репутация: 163
По умолчанию Выбрка значений из массива без повторений...

Собственно решил написать скрипт.... и возникли проблемы... подскажите что не так сделал....
Код:
<?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  
Старый 16.05.2007, 11:55
Ky3bMu4
Постоянный
Регистрация: 03.02.2007
Сообщений: 520
Провел на форуме:
1777536

Репутация: 932


Отправить сообщение для Ky3bMu4 с помощью ICQ
По умолчанию

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  
Старый 16.05.2007, 12:04
Isis
Флудер
Регистрация: 20.11.2006
Сообщений: 3,316
Провел на форуме:
16641028

Репутация: 2371


По умолчанию

Цитата:
Сообщение от 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); 
?>
Вроде так.
и че ты дал?
Во-первых не рабочий, во-вторых что изменил?
 
Ответить с цитированием

  #4  
Старый 16.05.2007, 12:13
Ch3ck
Познавший АНТИЧАТ
Регистрация: 09.06.2006
Сообщений: 1,359
Провел на форуме:
5301021

Репутация: 1879


По умолчанию

http://il.php.net/manual/ru/function.array-unique.php
 
Ответить с цитированием

  #5  
Старый 16.05.2007, 12:18
Isis
Флудер
Регистрация: 20.11.2006
Сообщений: 3,316
Провел на форуме:
16641028

Репутация: 2371


По умолчанию

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 )
 
Ответить с цитированием

  #6  
Старый 16.05.2007, 12:49
Helios
Постоянный
Регистрация: 14.01.2007
Сообщений: 459
Провел на форуме:
1469995

Репутация: 589
Отправить сообщение для Helios с помощью ICQ
По умолчанию

PHP код:
for ($i=0$i<count($Massiv);$i++) 
В случае, если $Massiv не изменяется во время работы цикла, нужно делать так:
PHP код:
$cnt count($Massiv);
for (
$i=0$i<$cnt$i++) 
Таким способом мы нехило экономим время работы скрипта, т.к. в первом варианте пересчет количества элементов массива выполнялся при каждом проходе цикла, чем больше количество элементов, тем больше времени это занимает. А так мы считаем только один раз.
 
Ответить с цитированием

  #7  
Старый 16.05.2007, 12:55
LolFEm
Участник форума
Регистрация: 08.09.2006
Сообщений: 194
Провел на форуме:
1627025

Репутация: 163
По умолчанию

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

Helios

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

  #8  
Старый 16.05.2007, 19:48
Developer
Участник форума
Регистрация: 03.05.2006
Сообщений: 167
Провел на форуме:
125505

Репутация: 116
По умолчанию

Больше нечего написать? Зачем изобретать велосипед, который все равно не будет ездить быстрее?
 
Ответить с цитированием

  #9  
Старый 17.05.2007, 10:31
Helios
Постоянный
Регистрация: 14.01.2007
Сообщений: 459
Провел на форуме:
1469995

Репутация: 589
Отправить сообщение для Helios с помощью ICQ
По умолчанию

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





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ