我知道这是一个类似的问题: Updating a Multidimensional Array in PHP
但我的问题不同:
我有一个多维数组,我想检查其中的值是否等于另一个,如果是更新值。
我试过这样的方式:
$room_id = '1205222__1763659__386572_1';
foreach($cart as $c){
if($c['item_type'] == 'hotel'){
foreach($c as $key => $value){
if(substr($key, 0, 7) == 'room_id'){
if($value == $room_id) {
$c[$key] = '';
}
}
}
}
}
这是我的数组的一个例子:
array() {
[0]=>
array() {
["item_type"]=> "hotel"
["room_id_0"]=> "1205222__1763659__386572_1"
["room_id_1"]=> "1205222__1763659__386572_2"
},
[1]=>
array() {
["item_type"]=> "hotel"
["room_id_0"]=> "1205222__1763659__386572_3"
["room_id_1"]=> "1205222__1763659__386572_4"
}
}
我已检查条件是否正常并且是,但是当我进行分配并再次打印数组后,数组不会更改。
有人可以帮助我吗?
由于
答案 0 :(得分:3)
这将无法正常工作,因为您正在更改$ c,这是数组$ cart的副本。您需要获取第一个数组值的数组键和第二个数组的数组键,然后更新:
试试这个
foreach($cart as $a => $c){
if($c['item_type'] == 'hotel'){
foreach($c as $key => $value){
if(substr($key, 0, 7) == 'room_id'){
if($value == $room_id) {
$cart[$a][$key] = '';
}
}
}
}
}
答案 1 :(得分:1)
您可以通过引用传递$ c来调用foreach,如下所示:
foreach($cart as &$c){
...
这可以让你改变项目的价值。
为了更进一步,您还可以通过引用传递$ value,然后通过修改$ value来更改其值:
// Notice &$c
foreach($cart as &$c){
if($c['item_type'] == 'hotel'){
// Notice &$value
foreach($c as $key => &$value){
if(substr($key, 0, 7) == 'room_id'){
if($value == $room_id) {
// Instead of $c[$key]
$value = '';
}
}
}
}
}