Естественно, длина строки может быть разная. Хоть 10-я глубина, хоть 20-я. Главное, чтобы удалялся только конечный элемент массива. Маялся-маялся, но так ничего придумать и не смог. Хотя задача на первый взгляд кажется очень простой.
Спустя 18 минут, 49 секунд (20.02.2011 - 22:14) MNO121280 написал(а):
Есть для этого специальная функция: array_pop.
Примерно так:
Примерно так:
$new_array = array_pop($old_array);
Спустя 15 минут, 35 секунд (20.02.2011 - 22:29) Guest написал(а):
Цитата |
Есть для этого специальная функция: array_pop. Примерно так:
|
Цитата |
mixed array_pop ( array &array ) array_pop() извлекает и возвращает последнее значение параметра array, уменьшая размер array на один элемент. Если array пуст (или не является массивом), будет возвращён NULL. |
Ну и как это может помочь в нашем случае? Я так понимаю, что она извлекает последний элемент массива, более ничего делать не умеет. Так искомый элемент не обязательно будет последним.
С помощью жестких ссылок пытался решить. Но к стыду своему не знаю как потом по ссылке получить сам элемент. Другими словами, если $a = &b['one']['two']['three'], то как потом по $a получить элемент массива $b? Операция разыменования в php-то вообще есть? :)
Спустя 28 минут, 15 секунд (20.02.2011 - 22:57) T1grOK написал(а):
Ну на счет 10-20 глубины вложения вы погарячились, если мне не изменяет память то в php можно создать только 6-ти мерные массивы.
И где мое спасибо?!)):
class a{
public function deset($params){
$keys = explode(".", $params);
$keys_str = '';
foreach($keys as $value){
$keys_str .= '['.$value.']';
}
eval('unset($_SESSION'.$keys_str.');');
}
}
$a = new a();
$a->deset(0);
И где мое спасибо?!)):
Спустя 52 минуты, 22 секунды (20.02.2011 - 23:50) Stas86 написал(а):
eval
Чудо-функция! Спасибо :) Не знал про нее. Как впрочем, и про ограничение на глубину массива :) Кстати, по иронии судьбы сделал так:
Чудо-функция! Спасибо :) Не знал про нее. Как впрочем, и про ограничение на глубину массива :) Кстати, по иронии судьбы сделал так:
))) Ровно на 6-ю вложенность. Но ваш метод безусловно изящнее, скопирую его себе.
function remove($name)
{
$params = explode('.',$name);
switch(count($params))
{
case 1:
unset($_SESSION[$params[0]]);
break;
case 2:
unset($_SESSION[$params[0]][$params[1]]);
break;
case 3:
unset($_SESSION[$params[0]][$params[1]][$params[2]]);
break;
case 4:
unset($_SESSION[$params[0]][$params[1]][$params[2]][$params[3]]);
break;
case 5:
unset($_SESSION[$params[0]][$params[1]][$params[2]][$params[3]][$params[4]]);
break;
case 6:
unset($_SESSION[$params[0]][$params[1]][$params[2]][$params[3]][$params[4]][$params[5]]);
break;
default:
return false;
}
}