для динамического получения / установки значений в многомерных массивах

Я пытаюсь написать корзину покупок на 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.

Есть ли лучший способ сделать это?

Спасибо.

5
задан César 23 November 2011 в 23:21
поделиться