2009-06-02 14 views
5

私は素早く簡単に配列をコピーできますが、配列内のどのキーをコピーするかを指定することができます。PHPのキーリストから新しい配列を作成する

私はこのための関数を簡単に書くことができますが、これを行うPHP関数があるかどうかは疑問です。下記のarray_from_keys()機能のようなもの

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

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

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

答えて

1

シンプルなアプローチ:

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

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

そのような操作を可能にするPHPでネイティブ関数、すなわちarray_intersect_keyがあります、しかし、あなたはあなたの構文を少し変更する必要があります。

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

$結果が含まれます:

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

感謝を最も簡単な方法は、私が思うに、このような何かをすることです。 配列を作成するには少し良い方法です: $ selected = array_fill_keys( 'small'、 'large'、null); まだそれほどエレガントではありませんが。それでも、 'array_from_keys'関数を書いておく価値はあると思います。 – bradt

4

この機能は、私の知る限りではありません。

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

それとも、あなたは簡単に関数を書くことができると言うよう:そのため

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

投稿した最初の解決策は、この全体の「スレッド」の中で最高のものでした:) –

関連する問題