Tôi đang cố gắng viết một giỏ hàng trong php và tôi gặp vấn đề với các giá trị get/set trong các mảng đa chiều. Tôi giữ lệnh hiện tại trong $_SESSION['basket']
. Có vẻ như:để nhận/đặt giá trị trong mảng đa chiều động
[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
)
)
)
)
Mọi mục được lưu trữ dưới dạng mạng con. Tôi có một hàm, kiểm tra xem một mục đã có tồn tại trong mảng basket
và trả về đường dẫn đến nó hay không. Ví dụ: nếu tôi muốn kiểm tra sản phẩm có id
98
(CD-Rom), hàm trả về đường dẫn sau: 1:extras:1
.
Tôi không thể tìm ra cách sử dụng đường dẫn nếu tôi muốn nhận hoặc đặt giá trị trong mảng. Có thể xây dựng đường dẫn đến một khóa mảng không, không sử dụng eval()
? Tôi có các chức năng sau:
function get_val($array, $path, $key) {
//some code
return eval('return '.$array.$path.$key.';');
}
Vì vậy, $price = get_val($_SESSION['basket'], $path, 'price')
; phải trả lại giá cho đĩa 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');
sẽ đặt giá cho CD-ROM đến 30.
Có cách nào tốt hơn để làm điều này?
Cảm ơn bạn.
eval là ác !!! –