PHP anahtar listeden yeni bir dizi oluşturmak

3 Cevap php

Ben bir dizi kopyalamak için hızlı ve kolay bir yolu var ama ben kopyalamak istediğiniz dizide hangi tuşları belirtmek yeteneği istiyorum.

Ben kolayca bu bir işlev yazabilirsiniz, ama bu zaten yapar bir PHP fonksiyonu var merak ediyorum. Aşağıda 'array_from_keys' fonksiyonu gibi bir şey.

$ Boyutlar = array ('küçük' => '10px ',' orta '=> '12px', 'büyük' ​​=> '13px ');

$ Seçilmiş = array_from_keys ($ boyut, 'küçük', 'büyük');

/ / $ Seçilmedi = array ('küçük' => '10px ',' büyük '=> '13px');

3 Cevap

Bu tür manipülasyonlar (array_intersect_key), ancak sizin sözdizimi biraz değiştirmek zorunda kalacak olanak PHP yerli bir işlevi var.

    $sizes = array('small' => '10px', 'medium' => '12px', 'large' => '13px');
    $selected = array('small' => null,'large' => null);

    $result = array_intersect_key($sizes, $selected);

    // $result will contain:
    Array
    (
        [small] => 10px
        [large] => 13px
    )

Bunun için bir fonksiyon olarak bildiğim kadarıyla yok. Kolay yolu bence böyle bir şey yapmak olacaktır:

$chosen = array_intersect_key($sizes, array_flip(array('small', 'large')));

Yoksa dediğiniz gibi kolayca bir fonksiyon yazabiliriz:

function array_from_keys() {
    $params = func_get_args();
    $array = array_shift($params);
    return array_intersect_key($array, array_flip($params));
}

$chosen = array_from_keys($sizes, 'small', 'large');

Basit bir yaklaşım:

$sizes = array('small' => '10px', 'medium' => '12px', 'large' => '13px');
$chosen = array("small", "large");
$new = array();

foreach ($chosen as $key)
  $new[$key] = $sizes[$key];