Rumah  >  Soal Jawab  >  teks badan

将Tukar nilai tatasusunan berbilang dimensi kepada tatasusunan satu dimensi

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粉969666670P粉969666670282 hari yang lalu384

membalas semua(2)saya akan balas

  • P粉738248522

    P粉7382485222024-02-04 20:07:00

    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);

    balas
    0
  • P粉151720173

    P粉1517201732024-02-04 12:18:10

    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;
            }
        }
    }
    

    balas
    0
  • Batalbalas