![]() |
Показаны 2 сообщений на этой странице |
Форум сетевых администраторов (http://netadmin.ws/forum/index.php)
- PHP (http://netadmin.ws/forum/forumdisplay.php?forumid=6)
-- Функция удаления елемента из массива (http://netadmin.ws/forum/showthread.php?threadid=11269)
Функция удаления елемента из массива
Требуется функция (алгоритм) которая бы удаляла элемент из глобального массива. Проблема заключается в том что не удается удалить елемент из многоуровнего массива. Допустим имеем:
$array = array();
// заполняем массив
for ($i = 0; $i < 5; $i++)
{
for($j = 1; $j < 5; $j++)
{
$arry[$i][$j] = $i . '+' . $j;
$array = $arry;
}
}
/* допутим теперь нужно удалить элемент [2][3]
аналогично unset($GLOBALS['array']['2']['3'])
я подумал передавать функции имя переменной
как певый аргумент и массив дерева ключей как
второй арнумент, но вот не получается у меня
удалить элемент из данного массива
*/
// вызов функции
unset_array_element('array', array(2, 3));
function unset_array_element($varname, $keys)
{
$work_array = &$GLOBALS[$varname];
if (!is_array($keys)
{
unset($work_array[$keys]); // нет проблем
}
else // вот тут трабла
{
// в этом и заключается поставленная задача
}
}
__________________
Всегда есть решение.
При помощи RaZEr нашли два решения поставленной задачи:
первая заключается в использовании eval, что не так изящно но работает на ура.
eval("unset(\$GLOBALS['$varname']['" . implode("']['", $keys) . "']);");
function unset_ex(&$arr, $path)
{
$key = array_shift($path);
if (!empty($path))
{
unset_ex($arr[$key], $path);
}
else
{
unset($arr[$key]);
}
}
// и вышеуказанная функция
unset_array_element('array', array(2, 3));
function unset_array_element($varname, $keys)
{
$work_array = &$GLOBALS[$varname];
if (!is_array($keys)
{
unset($work_array[$keys]); // нет проблем
}
else // вызов рекурсии
{
// eval("unset(\$GLOBALS['$varname']['" . implode("']['", $keys) . "']);");
// или
unset_ex($GLOBALS[$varname], $keys);
}
}
__________________
Всегда есть решение.
| Формат времени GMT. Текущее время 23:44. | Показаны 2 сообщений на этой странице |
Powered by: vBulletin Version 2.2.4
Copyright © Jelsoft Enterprises Limited 2000, 2001.