我有想要排序的数据。
{
"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) { } ["口服(肠内) )"]=> 数组(0) { } } 数组(4) { ["Infus"]=> 数组(0) { } ["Injeksi"]=> 数组(0) { } ["Transfusi"]=> array(0) { } ["口服(肠内)"]=> array(0) { } } array(4) { ["Infus"]=> array(0) { } ["Injeksi"]=> array( 0) { } ["Transfusi"]=> array(0) { } ["口服(肠内)"]=> array(0) { } }
这是为什么,解决办法是什么?
问题是在 PHP 中数组是按值传递的,而不是按引用传递的。这意味着当使用
$jenis_cairan_masuk_master
循环 foreach,
时,$value3
变量是原始数组的副本,而不是引用。因此,当在 array_push()
上使用 $value3
时,您正在修改副本,而不是原始数组。
您可以使用
&
运算符通过引用传递数组来修改原始数组。
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]);
}
}
};
在此代码中,
foreach($jenis_cairan_masuk_master AS $key3 => &$value3)
通过引用传递$value3
,因此对$value3
的任何修改都会影响原始数组。