我有一些数据要整理。
{
"0": {
"jenis_cairan_masuk": {
"name": "jenis_cairan_masuk",
"value": "Oral (Enteral)"
},
"keterangan_cairan_masuk": {
"name": "keterangan_cairan_masuk",
"value": "langsung"
},
"jumlah_cairan_masuk": {
"name": "jumlah_cairan_masuk",
"value": "28"
}
},
"1": {
"jenis_cairan_masuk": {
"name": "jenis_cairan_masuk",
"value": "Injeksi"
},
"keterangan_cairan_masuk": {
"name": "keterangan_cairan_masuk",
"value": "langsung"
},
"jumlah_cairan_masuk": {
"name": "jumlah_cairan_masuk",
"value": "50"
}
},
"2": {
"jenis_cairan_masuk": {
"name": "jenis_cairan_masuk",
"value": "Injeksi"
},
"keterangan_cairan_masuk": {
"name": "keterangan_cairan_masuk",
"value": "tidak langsung"
},
"jumlah_cairan_masuk": {
"name": "jumlah_cairan_masuk",
"value": "10"
}
}
}
字符串
数据是一个字符串,并在$data ['tabel_cairan_masuk']变量中声明。我想将每个数据放在对象中以提供一个数组。下面是我的代码。
$tabel_cairan_masuk = json_decode($data['tabel_cairan_masuk']);
$jenis_cairan_masuk_master = [
'Infus' => [],
'Injeksi' => [],
'Transfusi' => [],
'Oral (Enteral)' => []
];
foreach($tabel_cairan_masuk AS $key2 => $value2){
$jenis_cairan_masuk = $value2->jenis_cairan_masuk->value;
$ket_cairan_masuk = $value2->keterangan_cairan_masuk->value;
$jumlah_cairan_masuk = $value2->jumlah_cairan_masuk->value;
foreach($jenis_cairan_masuk_master AS $key3 => $value3){
if($jenis_cairan_masuk == $key3){
array_push($value3, [$jenis_cairan_masuk, $ket_cairan_masuk, $jumlah_cairan_masuk]);
}
}
};
var_dump($jenis_cairan_masuk_master);
型
上面的代码会将原始对象字符串数据解码为一个真实的对象,这样它就可以循环了。之后,我声明了一个数组来方便所需的排序格式($jenis_cairan_masuk_master)。问题存在于array_push()上,它似乎没有更新提供的数组,所以当我使用var_dump()检查时,它返回空,如下所示:
array(4) { ["Infus"]=> array(0) { } ["Injeksi"]=> array(0) { } ["Transfusi"]=> array(0) { } ["Oral (Enteral)"]=> array(0) { } } array(4) { ["Infus"]=> array(0) { } ["Injeksi"]=> array(0) { } ["Transfusi"]=> array(0) { } ["Oral (Enteral)"]=> array(0) { } } array(4) { ["Infus"]=> array(0) { } ["Injeksi"]=> array(0) { } ["Transfusi"]=> array(0) { } ["Oral (Enteral)"]=> array(0) { } }
为什么会这样,解决办法是什么?
1条答案
按热度按时间9gm1akwq1#
问题在于PHP中数组是通过值传递的,而不是通过引用传递的。这意味着当使用
foreach,
循环$jenis_cairan_masuk_master
时,$value3
变量是原始数组的副本,而不是引用。因此,当在$value3
上使用array_push()
时,您修改的是副本,而不是原始数组。可以使用
&
运算符通过引用传递数组来修改原始数组。字符串
在此代码中,
foreach($jenis_cairan_masuk_master AS $key3 => &$value3)
通过引用传递$value3
,因此对$value3
的任何修改都会影响原始数组。