Я пытаюсь написать корзину покупок в php, и у меня проблема с получением / установкой значений в многомерных массивах.
Я держу текущий заказ в $_SESSION['basket']
. Это выглядит так:
[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
)
)
)
)
Каждый элемент хранится в виде подмассива. У меня есть функция, которая проверяет, существует ли данный элемент в массиве basket
и возвращает путь к нему. Например, если я хочу проверить продукт с помощью 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['basket'], $path, 'price')
; должен вернуть цену на CD-ROM (19.99)
function set_val($array, $path, $key, $value) {
//some code
$str = eval(''.$array.$path.$key.';');
$str = $value;
}
set_val($_SESSION['basket'], $path, 'price', '30');
установит цену на CD-ROM равной 30.
Есть ли лучший способ сделать это?
Спасибо.