2012-04-26 14 views
26

I tienen una matriz de matrices de esta manera:¿Cómo extraer claves y valores de matriz específicos a otra matriz?

array(array(), array(), array(), array()); 

las matrices dentro de la matriz principal contienen 4 teclas y sus valores. Las teclas son las mismas entre todos los conjuntos de la siguiente manera:

array('id' => 'post_1', 
     'desc' => 'Description 1', 
     'type' => 'type1', 
     'title' => 'Title' 
    ); 

array('id' => 'post_2', 
     'desc' => 'Description 2', 
     'type' => 'type2', 
     'title' => 'Title' 
    ); 

Así que quieren crear otra matriz y extraer los id y type valores y ponerlos en una nueva matriz de esta manera:

array('post_1' => 'type1', 'post_2' => 'type2'); // and so on 

El las claves de este conjunto serán el valor de id matrices antiguas clave y su valor será el valor de la clave type.

¿Es posible lograr esto? Intenté buscar php.net Array Functions, pero no sé qué función usar.

Y gracias de antemano.

Respuesta

25

sólo tiene que utilizar un buen ol' bucle:

$newArray = array(); 
foreach ($oldArray as $entry) { 
    $newArray[$entry['id']] = $entry['type']; 
} 
+10

I upvoted la pregunta y la respuesta. ¿Cómo puedo rechazar el PHP por no proporcionar un mejor método? –

+1

@ Olivier'Ölbaum'Scherler Buenas noticias: php ha proporcionado una función para esto - ver la respuesta más alta votada. – mickmackusa

67

PHP recientemente agregó nueva función a sus funciones de matriz que hace exactamente lo que quería. Estoy respondiendo esto con la esperanza de que pueda ayudar a alguien en el futuro con esta pregunta.

La función que hace esto es array_column. para conseguir lo que quería que iba a escribir:

array_column($oldArray, 'type', 'id'); 

Tenga en cuenta que sólo se introdujo en la versión de PHP 5.5.0, por lo que usarlo en versiones anteriores de PHP ya sea para uso aceptado respuesta o echar un vistazo a cómo esta función se llevó a cabo en PHP y utilizar esta biblioteca: https://github.com/ramsey/array_column

+1

Además, puede ajustar eso en array_unique para filtrar los valores duplicados :) http://php.net/manual/en/function.array-unique.php –

-2

supongamos que tenemos una matriz $ oldArray de la que queremos extraer y segunda matriz $ array es una en la que será sto suena los valores extraídos, que inicialmente está en blanco.

$oldArray = array(
    0 => array('id' => 'post_1', 
      'desc' => 'Description 1', 
      'type' => 'type1', 
      'title' => 'Title' 
     ), 

    1 => array('id' => 'post_2', 
      'desc' => 'Description 2', 
      'type' => 'type2', 
      'title' => 'Title' 
     ) 
); 

$array = array(); //Blank array 

foreach(oldArray as $i => $oldarray){ 
    $array[$i][$oldarray['id']] = $oldarray['type']; 
} 

Ahora $ array tienen par clave/valor de la siguiente manera

array(
    0 => array('post_1' => 'type1'), 

    1 => array('post_2' => 'post_2') 
); 
Cuestiones relacionadas