将Tukar nilai tatasusunan berbilang dimensi kepada tatasusunan satu dimensi
P粉969666670
P粉969666670 2024-02-03 23:06:59
0
2
419

Saya ingin menukar nilai dalam satu tatasusunan berbilang dimensi jika kunci yang sepadan ditemui dalam tatasusunan bersekutu rata yang lain.

Saya mempunyai dua tatasusunan ini:

$full = [
    'Cars' => [
         'Volvo' => 0,
         'Mercedes' => 0,
         'BMW' => 0,
         'Audi' => 0
    ],
    'Motorcycle' => [
        'Ducati' => 0,
        'Honda' => 0,
        'Suzuki' => 0,
        'KTM' => 0
    ]
];

$semi = [
    'Volvo' => 1,
    'Audi' => 1
];

Saya mahu tatasusunan kelihatan seperti ini:

Array
(
    [Cars] => Array
        (
            [Volvo] => 1
            [Mercedes] => 0
            [BMW] => 0
            [Audi] => 1
        )

    [Motorcycle] => Array
        (
            [Ducati] => 0
            [Honda] => 0
            [Suzuki] => 0
            [KTM] => 0
        )
)

Saya mendapat tatasusunan $semi daripada medan input dan ingin menggabungkannya menjadi $full untuk menyimpannya ke pangkalan data saya.

Saya telah mencuba array_replace() seperti:

$replaced = array_replace($full, $semi);

P粉969666670
P粉969666670

membalas semua(2)
P粉738248522

Anda hanya perlu mengakses "leafnodes" dan sangat mudah untuk mengulang dan mengubah suai keseluruhan tatasusunan menggunakan array_walk_recursive().

Sintaks "fungsi anak panah" moden membenarkan akses kepada separuh tatasusunan tanpa menulis use().

Kaedah ini tidak akan membuat panggilan fungsi berulang. Ia secara bersyarat menambah nilai yang terdapat dalam tatasusunan separuh dengan rujukan (&$v) 修改 $v,使用“加法赋值”组合运算符 (+=) 以及空合并operator (??) dalam tatasusunan penuh.

Kod: (Demo)

array_walk_recursive(
    $full,
    fn(&$v, $k) => $v += $semi[$k] ?? 0
);

var_export($full);

Tidak menggunakan array_walk_recursive() memerlukan penggunaan gelung bersarang untuk menambah pengeluar yang layak.

Kod: (Demo)

foreach ($full as &$manufacturers) {
    foreach ($manufacturers as $m => &$count) {
        $count += $semi[$m] ?? 0;
    }
}
var_export($full);
P粉151720173

Anda harus menggelung $semi 数组并检查它是否存在于 $full melalui salah satu tatasusunan dan menambahnya:

foreach ($semi as $semiItem => $semiValue) {
    foreach ($full as &$fullItems) {
        if (isset($fullItems[$semiItem])) {
            $fullItems[$semiItem] = $semiValue;
        }
    }
}
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan