2009-06-02 20 views
5

Quiero una manera rápida y fácil de copiar una matriz, pero la capacidad de especificar qué teclas de la matriz que quiero copiar.Crear una nueva matriz desde la lista de claves en PHP

Puedo escribir fácilmente una función para esto, pero me pregunto si ya hay una función de PHP que lo haga. Algo así como la función array_from_keys() a continuación.

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

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

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

Respuesta

1

enfoque simple:

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

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

Hay una función nativa en PHP que permite este tipo de manipulaciones, es decir array_intersect_key, sin embargo tendrá que modificar su sintaxis un poco.

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

$ resultado contendrá:

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

Gracias por eso. Una forma ligeramente mejor de compilar el conjunto: $ selected = array_fill_keys ('small', 'large', null); Aunque todavía no es muy elegante. Todavía vale la pena escribir esa función 'array_from_keys', creo. – bradt

4

No hay una función para este por lo que yo sé. La forma más sencilla sería la de hacer algo como esto pienso:

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

O como usted dice que puede escribir una función:

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 primera solución que publicaste fue la mejor en todo este "hilo" :) –

Cuestiones relacionadas