PHP - qatorni boshqa nolga teng bo'lmagan qator bilan almashtiring

Bir qatorning qiymatlarini boshqa nostandart bo'lmagan qatorlar qiymatlari bilan o'zgartiradigan va natija sifatida faqat birinchi (yangilangan) qatorni oladigan usul bormi? Misol uchun:

$arr1 = Array
        (
            [key3] => var3
            [key4] => var4
        )
$arr2 = Array
        (
            [key1] => var1
            [key2] => var2
            [key3] => new_var
            [key4] => new_var
            [key5] => var5
            [key6] => var6
        )

Men olishni xohlayman:

$arr_result = Array
        (
            [key3] => new_var
            [key4] => new_var
        )

$arr_result = array_merge($arr1, $arr2)

bu yechim emas

1

7 javoblar

Agar sizda bir xil tugma mavjud bo'lsa, ikkinchi qatorning qiymatini o'zgartirish uchun birinchi qatorni harakat qilishingiz mumkin. Foreach yoki array_walk() dan foydalanishingiz mumkin

foreach($array1 as $k => &$v)
{
  $v = isset($array2[$k]) ? $array2[$k] : $v;
}
2
qo'shib qo'ydi

array_intersect_key dan foydalanishingiz mumkin:

Barcha argumentlarda mavjud kalitlarga ega bo'lgan birinchi dalillar ning barcha yozuvlarini o'z ichiga olgan assotsiativ qatorni qaytaradi.


$arr_result = array_intersect_key($array2, $array1);
2
qo'shib qo'ydi
Bu yaxshi yechim, lekin men olishni istaganim emas. Istalgan natija har doim ham birinchi qatorning barcha kalitlari (yangilangan qiymatlar bilan)
qo'shib qo'ydi muallif Heart Breaker, manba

array_intersect_key dan foydalanishingiz mumkin:

Barcha argumentlarda mavjud kalitlarga ega bo'lgan birinchi dalillar ning barcha yozuvlarini o'z ichiga olgan assotsiativ qatorni qaytaradi.


$arr_result = array_intersect_key($array2, $array1);
2
qo'shib qo'ydi
Bu yaxshi yechim, lekin men olishni istaganim emas. Istalgan natija har doim ham birinchi qatorning barcha kalitlari (yangilangan qiymatlar bilan)
qo'shib qo'ydi muallif Heart Breaker, manba

Bunga erishish uchun array_replace <// a> bilan birga array_keys_intersect bilan birga >:

$result = array_intersect_key(array_replace($arr1, $arr2), $arr1);

Bu erda ishlaydigan demo .

Biroq, faqat birinchi qatorni pastadir va o'zingiz o'rnating, bu holda yanada maqbul bo'ladi.

0
qo'shib qo'ydi

Bunga erishish uchun array_replace <// a> bilan birga array_keys_intersect bilan birga >:

$result = array_intersect_key(array_replace($arr1, $arr2), $arr1);

Bu erda ishlaydigan demo .

Biroq, faqat birinchi qatorni pastadir va o'zingiz o'rnating, bu holda yanada maqbul bo'ladi.

0
qo'shib qo'ydi

Jomoos anwer ga asoslanib, buni sinab ko'rdim va u yaxshi ishlaydi:

$arr_res = array_intersect_key($array2, $array1);
return array_merge($array1, $arr_res);
0
qo'shib qo'ydi
foreach($arr1 as $key => $value) {
    if(array_key_exists($key, $arr2))
        $arr1[$key] = $arr2[$key];
}

Ushbu usulni yaxshi ko'raman, chunki kod qisqartirilgan, samarali va funksional ishlatilgan PHP funksiyalaridan to'g'ri o'qiladi.

0
qo'shib qo'ydi
PhP |BotsUz
PhP |BotsUz
93 ishtirokchilar

Phpni o'rganishni Hohlasangiz https://t.me/joinchat/AAAAAE-KRc5dd5tPMmGmWA A'zo bo'lin