Главная :: Форум :: Web ClipArt :: Поиск :: Статистика :: Топ 10 :: Публикация :: Рекомендовать
netadmin.ws
Панель управления Регистрция свободна! Календарь Список пользователей Часто задаваемые вопросы Поиск по форуму Архив скриптов Главная   
Форум сетевых администраторов
Форум сетевых администраторов Форум сетевых администраторов » Программирование » PHP » Функция удаления елемента из массива
Предыдущая тема     Следующая тема
Автор
Тема    Новая тема     Ответить на эту тему
polo
Администратор
Средний рейтинг: 4.77 | Оценок: 106
/нажмите чтобы посмотреть кто оценивал/

Зарегистрирован: May 2001
Место проживания:
Публикаций: 4642
Статус: polo в оф-лайне
Функция удаления елемента из массива [сообщение #79812]

Требуется функция (алгоритм) которая бы удаляла элемент из глобального массива. Проблема заключается в том что не удается удалить елемент из многоуровнего массива. Допустим имеем:


PHP:


$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 
// вот тут трабла
    
{
        
// в этом и заключается поставленная задача
    
}
}

__________________
Всегда есть решение.

Сообщить модератору об этом сообщении | Предупреждение | IP: определен

Old Post 07-12-2005 15:44
Нажмите сюда для просмотра профайла polo Отправить Персональное сообщение polo Посетить домашнию страничку polo! Найти сообщения от polo Добавить polo в свой список друзей Редактировать/Удалить сообщение Ответить Цитируя
polo
Администратор
Средний рейтинг: 4.77 | Оценок: 106
/нажмите чтобы посмотреть кто оценивал/

Зарегистрирован: May 2001
Место проживания:
Публикаций: 4642
Статус: polo в оф-лайне
[сообщение #79817]

При помощи RaZEr нашли два решения поставленной задачи:

первая заключается в использовании eval, что не так изящно но работает на ура.

PHP:


eval("unset(\$GLOBALS['$varname']['" . implode("']['", $keys) . "']);");


И вторая заключается в создании вспомогающей функии которая рекурсивно проходится по массиву переданному по ссылке.

PHP:

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);
    } 
}

__________________
Всегда есть решение.

Сообщить модератору об этом сообщении | Предупреждение | IP: определен

Old Post 07-12-2005 22:14
Нажмите сюда для просмотра профайла polo Отправить Персональное сообщение polo Посетить домашнию страничку polo! Найти сообщения от polo Добавить polo в свой список друзей Редактировать/Удалить сообщение Ответить Цитируя



Формат времени GMT. Текущее время 21:21.
Новая тема   Ответить на эту тему [ Версия для печати Печать | Отправить эту страницу другу/знакомому! Отправить | Получать уведомления об обновлении этой темы Подписка ] Предыдущая тема     Следующая тема
Навигация по форуму:
Оценка темы:

Правила форума:
Вы не можете создавать новые темы.
Вы не можете отвечать на существующие темы.
Вы не можете прикреплять файлы.
Вы не можете редактировать свои сообщения.
HTML теги выкл.
Спец. код вкл.
Смайлики вкл.
[IMG] тег выкл.
 

Page generated in 0.54407907 seconds (98.54% PHP - 1.46% MySQL) with 23 queries.


  Главная :: Форум :: Web ClipArt :: Поиск :: Статистика :: Топ 10 :: Публикация :: Рекомендовать
©NetAdmin.ws, 2001-2026.
Powered by: vBulletin
Copyright ©2000, 2001, Jelsoft Enterprises Limited.