Estoy tratando de escribir un carrito de compras en php y tengo un problema con los valores get/set en matrices multidimensionales. Guardo el pedido actual en $_SESSION['basket']
. Parece que:funciones para obtener/establecer valores en matrices multidimensionales dinámicamente
[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
)
)
)
)
Cada elemento se almacena como un subcampo. Tengo una función que comprueba si existe un elemento determinado en la matriz basket
y le devuelve la ruta. Por ejemplo, si deseo verificar un producto con id
98
(CD-Rom), la función devuelve la siguiente ruta: 1:extras:1
.
No puedo encontrar la manera de usar la ruta si quiero obtener un valor en la matriz. ¿Es posible construir la ruta a una clave de matriz, sin el uso de eval()
? Tengo estas funciones:
function get_val($array, $path, $key) {
//some code
return eval('return '.$array.$path.$key.';');
}
Así, $price = get_val($_SESSION['basket'], $path, 'price')
; debe devolver el precio de 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');
fijará el precio de CD-ROM a 30.
¿Hay una mejor manera de hacer esto?
Gracias.
eval es malo !!! –