2009-06-02 5 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

게시 한 첫 번째 해결책은이 전체 "스레드"에서 가장 좋은 해결책이었습니다. –