php array_push()在将array推送到array时的问题

epfja78i  于 11个月前  发布在  PHP
关注(0)|答案(1)|浏览(111)

我有一些数据要整理。

{
"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) { } }
为什么会这样,解决办法是什么?

9gm1akwq

9gm1akwq1#

问题在于PHP中数组是通过值传递的,而不是通过引用传递的。这意味着当使用foreach,循环$jenis_cairan_masuk_master时,$value3变量是原始数组的副本,而不是引用。因此,当在$value3上使用array_push()时,您修改的是副本,而不是原始数组。
可以使用&运算符通过引用传递数组来修改原始数组。

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的任何修改都会影响原始数组。

相关问题