Как удалить элемент массива, если "путь к элементу ввиду строки"?

Статус
В этой теме нельзя размещать новые ответы.

alpha

Новичок
Как удалить элемент массива, если "путь к элементу ввиду строки"?

Тоесть хочу удалить элемент из массива, зная его строковое представление.
Тоесть есть к примеру массив
PHP:
    $a = array( 
                'b'=>array('c'=>array(1, 2, 3, 4, 5)),
                'd'=>18,
                'o'=>4
                );
Я хочу удалить $a['b']['c'][3], но у меня есть только строка этого элемента: "b['c'][3]".

Возможно я как-то не так делаю, но что-то я не совсем догоняю как это сделать.
Значение произвольного элемента я нахожу, если убрать все проверки на существование, так:
PHP:
                    $array - искомый массив
                    $ParamName - путь к удаляемому элементу
                    надо удаалить $array['a']['b']['c'], имеем строку "a['b']['c']"
                    

                    $parts = Array();

                    $pos = strpos($ParamName, '[');
                    $parts = explode('][', substr($ParamName, $pos + 1, -1));
                    array_unshift($parts, substr($ParamName, 0, $pos));

                    // В результате получаем массив типа $parts = Array('a', 'b', 'c');
                    $currarr =& $array;

                    foreach ($parts as $part) {
                        if (!isset($currarr[$part])) { return false; }
                        $currarr =& $currarr[$part];
                    }
                    $currarr - есть значение искомого элемента;
Если этот метод не через ж..., то как мне сделать unset того, на что ссылается $currarr?
Если все-таки метод через ж..., то просветите пожалуйста КАК?
 

dimagolov

Новичок
alpha
а откуда берется строка?
почему она "a['b']['c']" а не "['a']['b']['c']" ? почему первый ключ особенный?
вообще есть eval
 

Pigmeich

Новичок
alpha
зачем такая структура данных в виде строки с ключами?
 

alpha

Новичок
>>а откуда берется строка?
из кода :).
>>почему она "a['b']['c']" а не "['a']['b']['c']" ? почему первый ключ особенный?
ну не суть важно, сделал так, можно по другому.

Ну вобщем-то я задал вопрос по следствию неудачной организации. :)

Просто у меня есть массиив произвольной структуры. Он выведен в броузере, каждый элемент- ссылка, кликнув на которую можно удалить элемент из массива. Элементом может быть и подмассив.
Т.к. давно, для одного проекта я писал функцию получения значения элемента массива по "строковому представлению его положения" (вот какой синтаксис попросили - такой и сделал, это к вопросу почему она "a['b']['c']" а не "['a']['b']['c']" ), то подумал что можно формировать ссылки вида "var[a][c][d]=1" и если $_GET[a][c][d]=1, то из массива $array удалять $array[a][c][d]( $_GET перебирается foreach и для каждого элемента строится строка вида a....). Как оказалась идея совсем неудачная :), т.к. unset($currarr) только разрывает связь $currarr с $array[a][c][d].
 

Pigmeich

Новичок
alpha
В именах передаваемых параметров можно использовать конструкции с массивами ([] и [key]) пользуйся этим и доставай из страницы массив.

Потом перебираем по foreach и итеративно погружаемся в массив:
PHP:
foreach .... {
$a = $a[$key];
}
 

Фанат

oncle terrible
Команда форума
я буду просто закрывать эти топики.
как показывает опыт - объяснить все равно ничего невозможно, а время тратить жалко.
ламерские же паттерны программирования обсуждайте на других форумах
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху