2009-06-02 3 views
5

Desidero un modo semplice e rapido per copiare un array ma la possibilità di specificare quali tasti nell'array voglio copiare.Creazione di un nuovo array dall'elenco chiavi in ​​PHP

mi può facilmente scrivere una funzione per questo, ma mi chiedo se c'è una funzione PHP che fa questo già. Qualcosa come la funzione array_from_keys() qui sotto.

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

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

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

risposta

1

approccio semplice:

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

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

C'è una funzione nativa in PHP che permette tali manipolazioni, vale a dire array_intersect_key, tuttavia si dovrà modificare la sintassi un po '.

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

risultato $ conterrà:

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

Grazie per questo. Un modo leggermente migliore per costruire l'array: $ selected = array_fill_keys ('small', 'large', null); Anche se non è ancora molto elegante. Vale comunque la pena di scrivere la funzione 'array_from_keys'. – bradt

4

Non c'è una funzione per questo per quanto ne so. Il modo più semplice sarebbe quella di fare qualcosa del genere penso:

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

O come si dice si può facilmente scrivere una funzione:

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

La prima soluzione che hai postato è stata la migliore di tutto questo "thread" :) –