将数组推入数组时 array_push() 的问题

问题描述 投票:0回答:1

我有想要排序的数据。

{
"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 arrays json foreach array-push
1个回答
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
的任何修改都会影响原始数组。

© www.soinside.com 2019 - 2024. All rights reserved.