cas*_*per 5 php function multidimensional-array
我试图在PHP中编写购物车,我在多维数组中有get/set值的问题.我保持当前的订单$_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
)
)
)
)
Run Code Online (Sandbox Code Playgroud)
每个项目都存储为子数组.我有一个函数,它检查basket数组中是否存在给定项并返回它的路径.例如,如果我想检查带有id 98(CD-Rom)的产品,该函数将返回以下路径:1:extras:1.
如果我想获取或在数组中设置一个值,我无法弄清楚如何使用路径.是否可以构造数组键的路径,而不使用eval()?我有这些功能:
function get_val($array, $path, $key) {
//some code
return eval('return '.$array.$path.$key.';');
}
Run Code Online (Sandbox Code Playgroud)
所以,$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;
}
Run Code Online (Sandbox Code Playgroud)
set_val($_SESSION['basket'], $path, 'price', '30'); 将CD-ROM的价格设置为30.
这样做有更好的方法吗?
谢谢.
Jan*_*roň 10
在这里你去了一段我前段时间已经过很好的代码:
function get_val($array,$path) {
for($i=$array; $key=array_shift($path); $i=$i[$key]) {
if(!isset($i[$key])) return null;
}
return $i;
}
function set_val(&$array,$path,$val) {
for($i=&$array; $key=array_shift($path); $i=&$i[$key]) {
if(!isset($i[$key])) $i[$key] = array();
}
$i = $val;
}
Run Code Online (Sandbox Code Playgroud)
看到这个测试示例,我相信它正是您所寻找的:
$data = array("x"=>array("y"=>array("z"=>"foo")));
echo get_val($data,array("x","y","z")); // foo
set_val($data,array("x","y","u"),"bar"); // $data["x"]["y"]["u"] = "bar";
Run Code Online (Sandbox Code Playgroud)