2009-06-02 25 views
5

Bir diziyi kopyalamanın hızlı bir kolay yolunu istiyorum, ancak dizideki hangi anahtarların kopyalamak istediğimi belirleyebiliyorum.PHP'de anahtar listeden yeni dizi oluştur

Bunun için kolayca bir işlev yazabilirim, ancak bunu zaten yapan bir PHP işlevi olup olmadığını merak ediyorum. Aşağıda array_from_keys() gibi bir işlev var.

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

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

// $chosen = array('small' => '10px', 'large' => '13px'); 

cevap

1

Basit yaklaşım:

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

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

böyle manipülasyonlar sağlar PHP'de bir yerli fonksiyon, yani array_intersect_key var, ancak sizin sözdizimi biraz değiştirmek zorunda kalacaktır.

<?php 
     $sizes = array('small' => '10px', 'medium' => '12px', 'large' => '13px'); 
     $selected = array_fill_keys(array('small', 'large'), null); 
     $result = array_intersect_key($sizes, $selected); 
?> 

$ sonucu içerecektir: olarak bildiğim kadarıyla bu bir fonksiyon yoktur

Array (
     [small] => 10px 
     [large] => 13px 
    ); 
+1

teşekkür ederiz. Diziyi oluşturmanın biraz daha iyi bir yolu: $ selected = array_fill_keys ('small', 'large', null); Yine de çok şık değil. Yine de 'array_from_keys' işlevinin yazıldığını düşünüyorum. – bradt

4

.

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

Yoksa kolayca bir fonksiyon yazabiliriz dedikleri gibi: en kolay yolu böyle bir şey yapmak olacaktır sanırım bunun için

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'); 
+0

Gönderdiğiniz ilk çözüm bu "thread" daki en iyisiydi :) –