Я пытаюсь написать корзину покупок на php, и у меня проблема с получением / установкой значений в многомерных массивах.
Я сохраняю текущий порядок in $ _ SESSION ['корзина']
. Это выглядит так:
[basket] => Array
(
[0] => Array
(
[pid] => 3
[name] => Camera
[price] => 200.99
[quantity] => 1
)
[1] => Array
(
[pid] => 5
[name] => Computer
[price] => 320.99
[quantity] => 1
[extras] => Array
(
[0] => Array
(
[pid] => 86
[name] => RAM
[price] => 99
[qty] => 1
)
[1] => Array
(
[pid] => 98
[name] => CD-ROM
[price] => 19.99
[qty] => 1
)
)
)
)
Каждый элемент хранится как подмассив. У меня есть функция, которая проверяет, существует ли данный элемент в массиве корзина
, и возвращает путь к нему. Например, если я хочу проверить продукт с id
98
(CD-Rom), функция вернет следующий путь: 1: extras: 1
.
Я не могу понять, как использовать путь, если я хочу получить или установить значение в массиве. Можно ли построить путь к ключу массива без использования eval ()
? У меня есть следующие функции:
function get_val($array, $path, $key) {
//some code
return eval('return '.$array.$path.$key.';');
}
Итак, $ price = get_val ($ _ SESSION ['корзина'], $ path, 'цена')
; должен вернуть цену CD-ROM (19,99)
function set_val($array, $path, $key, $value) {
//some code
$str = eval(''.$array.$path.$key.';');
$str = $value;
}
set_val ($ _ SESSION ['корзина'], $ path, 'цена', '30');
установит цену для CD-ROM равной 30.
Есть ли лучший способ сделать это?
Спасибо.