Forum Webscript.Ru
Программирование => PHP => Тема начата: RelaX от 16 Марта 2002, 18:48:35
-
есть первый массив
$coin = array (\'1\', \'4\', \'9\', \'34\', \'26\');
и второй $money = array (\'3\', \'5\', \'56\', \'1\', \'37\', \'9\');
мне надо удалить из второго массива все совпадающие элементы с первым массивом, т.е. третий массив должен иметь вид
$massiv = array (\'3\', \'5\', \'56\', \'37\');
как такое сделать?
-
Вроде так:
$new_array=array($array1,$array2);
$new_array2=array_unique($new_array);
-
AlieN
нет, это не подойдет, т.к. array_unique($new_array); удаляет повторяющие элементы в новом массиве (например массив содержит \'2\', \'4\', \'2\', \'2\', \'9\' , то после этой функции массив станет \'2\', \'4\' ), мне надо полное исключение эелементов первого массива во втором....
-
тогда array_walk + array_search
-
сделал то, что мне надо:
$b=mysql(DBName,"select * from $table1");
for($i=0; $i { $cat=mysql_fetch_array($b);
$array_catid[]=$cat[catid];
};
$d=mysql(DBName,"select * from $table2");
for($i=0; $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]);
};
};
};
код может выглидит и ужасно, но как ни странно, это РАБОТАЕТ :)
-
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]);
}
}
-
Зачем мучиться?
$k = 0;
for ($i = 0; $i < sizeof($money); $i++) {
if (!in_array($money[$i], $coin)) {
$massiv[$k] = $money[$i];
$k++;
}
}
-
Артем
Я сначала так и думал но вот это фразу в спецификации не понял:
in_array (mixed needle, array haystack [, bool strict])
Поэтому переписал через array_search
-
с слабо еще проще решение? ;)
$arr3 = array_diff($arr2, $arr1);