Автор Тема: из "большего" массива вычесть "меньший массив"  (Прочитано 3642 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн RelaX

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 200
  • +0/-0
  • 0
    • Просмотр профиля
есть первый массив
$coin = array (\'1\', \'4\', \'9\', \'34\', \'26\');
и второй $money = array (\'3\', \'5\', \'56\', \'1\', \'37\', \'9\');
мне надо удалить из второго массива все совпадающие элементы с первым массивом, т.е. третий массив должен иметь вид
$massiv = array (\'3\', \'5\', \'56\', \'37\');
как такое сделать?

Оффлайн AlieN

  • Абыр!=)
  • Ветеран
  • *****
  • Сообщений: 1315
  • +0/-1
  • 2
    • Просмотр профиля
Вроде так:
$new_array=array($array1,$array2);
$new_array2=array_unique($new_array);
The Chemical Brothers - Hey Boy Hey Girl (User Friendly Mix)
Peter Presta pres - Set Sail(Peter Presta Apple Jaxx Dub) She S.Sunshine Feat Mila - Bring The Beat Back (Club Mix) Jerry Ropero - Home Alone (Dub Mix)

Оффлайн RelaX

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 200
  • +0/-0
  • 0
    • Просмотр профиля
AlieN
нет, это не подойдет, т.к. array_unique($new_array); удаляет повторяющие элементы в новом массиве (например массив содержит \'2\', \'4\', \'2\', \'2\', \'9\' , то после этой функции массив станет \'2\', \'4\' ), мне надо полное исключение эелементов первого массива во втором....

Оффлайн AlieN

  • Абыр!=)
  • Ветеран
  • *****
  • Сообщений: 1315
  • +0/-1
  • 2
    • Просмотр профиля
тогда array_walk + array_search
The Chemical Brothers - Hey Boy Hey Girl (User Friendly Mix)
Peter Presta pres - Set Sail(Peter Presta Apple Jaxx Dub) She S.Sunshine Feat Mila - Bring The Beat Back (Club Mix) Jerry Ropero - Home Alone (Dub Mix)

Оффлайн RelaX

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 200
  • +0/-0
  • 0
    • Просмотр профиля
сделал то, что мне надо:

$b
=mysql(DBName,"select * from $table1");
for(
$i=0$i<mysql_numrows($b); $i++)
 { 
$cat=mysql_fetch_array($b);
$array_catid[]=$cat[catid];
 };


 
$d=mysql(DBName,"select * from $table2");
for(
$i=0$i<mysql_numrows($d); $i++)
 { 
$tovar=mysql_fetch_array($d);
$array_tovar[]=$tovar[category];
};

$new_array array_merge($array_catid$array_tovar);
$new_array array_unique($new_array);


foreach (
$array_catid as $key=>$value)
      {
       foreach (
$new_array as $keys=>$values)
             {
              if (
$array_catid[$key]===$new_array[$keys])
                   {
                   unset (
$new_array[$keys]);

                   };

             };

      };


код может выглидит и ужасно, но как ни странно, это РАБОТАЕТ :)

Оффлайн AlieN

  • Абыр!=)
  • Ветеран
  • *****
  • Сообщений: 1315
  • +0/-1
  • 2
    • Просмотр профиля

foreach ($array_catid as $key=>$value)
{
if(
$unsetkey=array_search ($array_catid[$key],$new_array))
    {
     unset(
$new_array[$unsetkey]);
    }
}

Код не проверял но вот какой алгоритм только что из спецификации прочитал:
array_search возвращает ключ элемента массива в котором найдено совпадение
следовательно ты проходишься под олному массиву и делаешь поиск по другому такого же значения в случае успеха ты получаешь ключ элемента во массиве в котором ты делаешь поиск.
Если код не работае так как сверху то должен работать вот так:

foreach ($array_catid as $key=>$value)
{
if(
array_search ($array_catid[$key],$new_array))
    {
     
$unsetkey=array_search ($array_catid[$key],$new_array);
     unset(
$new_array[$unsetkey]);
    }
}
The Chemical Brothers - Hey Boy Hey Girl (User Friendly Mix)
Peter Presta pres - Set Sail(Peter Presta Apple Jaxx Dub) She S.Sunshine Feat Mila - Bring The Beat Back (Club Mix) Jerry Ropero - Home Alone (Dub Mix)

Оффлайн Артем

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 5
  • +0/-0
  • 0
    • Просмотр профиля
Зачем мучиться?

$k 
0;
for (
$i 0$i sizeof($money); $i++) {
      if (!
in_array($money[$i], $coin)) {
            
$massiv[$k] = $money[$i];
            
$k++;
      }
}
Верить в наше время нельзя никому. Даже себе. Мне - можно.

Оффлайн AlieN

  • Абыр!=)
  • Ветеран
  • *****
  • Сообщений: 1315
  • +0/-1
  • 2
    • Просмотр профиля
Артем
Я сначала так и думал но вот это фразу в спецификации не понял:
Цитировать

in_array (mixed needle, array haystack [, bool strict])

Поэтому переписал через array_search
The Chemical Brothers - Hey Boy Hey Girl (User Friendly Mix)
Peter Presta pres - Set Sail(Peter Presta Apple Jaxx Dub) She S.Sunshine Feat Mila - Bring The Beat Back (Club Mix) Jerry Ropero - Home Alone (Dub Mix)

Оффлайн Dm

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1263
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
с слабо еще проще решение? ;)

$arr3 = array_diff($arr2, $arr1);
с уважением,
магистр белой магии.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28