Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Удаление дублей из массива

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Удалить дубли из массива по значению
netclan
Отправлено: 21 Сентября, 2013 - 05:42:21
Post Id



Гость


Покинул форум
Сообщений всего: 65
Дата рег-ции: Нояб. 2012  


Помог: 0 раз(а)




Здравствуйте!
Как можно удалить из массива:
PHP:
скопировать код в буфер обмена
  1.  
  2. (
  3.     [0] = Алексей
  4.     [1] = Иванов
  5.     [2] = 12
  6.     [3] = 13
  7. )
  8. (
  9.     [0] = Алексей
  10.     [1] = Сидоров
  11.     [2] = 14
  12.     [3] = 18
  13. )
  14. (
  15.     [0] = Александр
  16.     [1] = Иванов
  17.     [2] = 16
  18.     [3] = 17
  19. )
  20. (
  21.     [0] = Александр
  22.     [1] = Иванов
  23.     [2] = 19
  24.     [3] = 18
  25. )
  26.  

все дубликаты типа:
PHP:
скопировать код в буфер обмена
  1. (
  2.     [0] = Александр
  3.     [1] = Иванов
  4.     [2] = 16
  5.     [3] = 17
  6. )
  7. и
  8. (
  9.     [0] = Александр
  10.     [1] = Иванов
  11.     [2] = 19
  12.     [3] = 18
  13. )
  14. и т.д.
  15.  

определяя дубликат по значению: [1] = Иванов, при этом обрабатываемый массив довольно большой. Не понял


-----
O_o
 
 Top
Squirrel
Отправлено: 21 Сентября, 2013 - 05:45:02
Post Id


Забанен


Покинул форум
Сообщений всего: 147
Дата рег-ции: Авг. 2013  


Помог: 4 раз(а)

[+]


Если массив "довольно большой" есть смысл хранить его в базе. SQLite например.
И удалять дубли уже средствами самой базы.
 
 Top
netclan
Отправлено: 21 Сентября, 2013 - 05:50:47
Post Id



Гость


Покинул форум
Сообщений всего: 65
Дата рег-ции: Нояб. 2012  


Помог: 0 раз(а)




Squirrel пишет:
Если массив "довольно большой" есть смысл хранить его в базе. SQLite например.
И удалять дубли уже средствами самой базы.

как альтернатива, а как все таки средствами php удалить дубли, не подскажите?


-----
O_o
 
 Top
Dmitri
Отправлено: 21 Сентября, 2013 - 08:39:22
Post Id


Новичок


Покинул форум
Сообщений всего: 20
Дата рег-ции: Авг. 2013  


Помог: 0 раз(а)




 
 Top
netclan
Отправлено: 21 Сентября, 2013 - 09:05:39
Post Id



Гость


Покинул форум
Сообщений всего: 65
Дата рег-ции: Нояб. 2012  


Помог: 0 раз(а)




[quote=Dmitri][/quote]
Если бы мне нужно было удалить Иванов
в массиве:
PHP:
скопировать код в буфер обмена
  1. (
  2.     [0] = Александр
  3.     [1] = Иванов
  4.     [2] = 16
  5.     [3] = 17
  6.     [4] = Иванов
  7.     [5] = Иванов
  8. )

я бы воспользовался данной функцией, но в том то и дело, что мне нужно удалить полностью:
PHP:
скопировать код в буфер обмена
  1.  
  2. (
  3.     [0] = Александр
  4.     [1] = Иванов
  5.     [2] = 16
  6.     [3] = 17
  7. )
  8.  

если в нем будет: повторяться [1] = Иванов, или я не догоняю как применить array_unique, покажите как Вы ведите её применение?


-----
O_o
 
 Top
netclan
Отправлено: 25 Сентября, 2013 - 12:04:07
Post Id



Гость


Покинул форум
Сообщений всего: 65
Дата рег-ции: Нояб. 2012  


Помог: 0 раз(а)




Помогло решение:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4.    /* Our Array of products */
  5.    $attribs[] = array(
  6.                            "name"         => "Test Product 1",
  7.                            "length"     => "42 cm",
  8.                            "weight"     => "0,5 kg",
  9.                            "price"     => "10 $",
  10.                            "stock"     => "100",
  11.                         );
  12.  
  13.    $attribs[] = array(
  14.                            "name"         => "Test Product 2",
  15.                            "length"     => "42 cm",
  16.                            "weight"     => "1,5 kg",
  17.                            "price"     => "10 $",
  18.                            "stock"     => "200",
  19.                         );
  20.  
  21.     /* The nice stuff */
  22.  
  23.       $new = array();
  24.       $exclude = array("");
  25.       for ($i = 0; $i<=count($attribs)-1; $i++) {
  26.          if (!in_array(trim($attribs[$i]["price"]) ,$exclude)) { $new[] = $attribs[$i]; $exclude[] = trim($attribs[$i]["price"]); }
  27.       }
  28.      
  29.       print_r($new); // $new is our sorted array
  30.  
  31. ?>
  32.  


-----
O_o
 
 Top
look2009
Отправлено: 26 Июля, 2014 - 03:08:17
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Июль 2014  


Помог: 0 раз(а)




Т.к. тема в индексе 1 по запросу у яшы "удалить дубли в массиве". То может кому пригодится.
PHP:
скопировать код в буфер обмена
  1.  
  2. echo 'Удаляем дубли (ждите), если данных много то долговато будет.....<br><br>';
  3. $qwer1 = mysql_query("SELECT * FROM `results` WHERE reg='".$region."'");
  4. while($myrow = mysql_fetch_array($qwer1))
  5.                 {
  6.         $urlsss[] = $myrow['reg'].'-------'.$myrow['urlhome'];// Собираем массив, используем делимитр
  7.                 }
  8. mysql_query("DELETE FROM `results` WHERE reg='".$region."'");// Удаляем то что забрали
  9. if (isset($urlsss)){
  10. $urlsss = array_unique($urlsss);// Удалили дубли
  11. $inter = count ($urlsss);// Пересчитали массив
  12.         foreach ($urlsss as $url)
  13.                 {
  14.                
  15.                         $url = explode ('-------', $url);
  16.                         mysql_query ("INSERT INTO `results` (`reg`,`urlhome`) VALUES ('".$url[0]."','".$url[1]."')");
  17.                 }
  18. echo 'Убрали дубли. Осталось '.$inter.' ссылок на дома.<br>';
  19.  

(Отредактировано автором: 26 Июля, 2014 - 15:55:30)

 
 Top
armancho7777777 Супермодератор
Отправлено: 26 Июля, 2014 - 04:29:12
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




CODE (SQL):
скопировать код в буфер обмена
  1. DELETE FROM users WHERE user_id IN (
  2.     SELECT user_id FROM `users` GROUP BY first_name, last_name HAVING COUNT(*) > 1
  3. )
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB