2010-02-18 27 views
22

tengo una matriz cuyos valores son todos los arrays de un formato específico que tiene este aspecto:conversión de matriz PHP de matrices en una sola matriz

Array 
(
    [0] => Array 
      (
       [username] => John 
      )  
    [1] => Array 
      (
       [username] => Joe 
      ) 
    [2] => Array 
      (
       [username] => Jake 
      ) 
) 

y me gustaría tener esto:

Array 
(
    [0] => John 
    [1] => Joe 
    [2] => Jake 
) 

Puedo hacer esto manualmente con un bucle, pero ¿hay una mejor manera? Si no, ¿es posible hacer esto para una matriz de objetos que tienen un atributo común?

Respuesta

28

Desde PHP 5.5.0 hay una función incorporada array_column que hace exactamente esto.

+0

Si está utilizando PHP 5.3 o 5.4, siempre puede usar [esta biblioteca] (http://benramsey.com/blog/2013/07/the-array-column-php-userland-library/) [(abrir -source)] (https://github.com/ramsey/array_column). –

+3

¿Cómo puedo usar array_column si no tengo claves específicas para mi matriz. Son las teclas predeterminadas proporcionadas en php – Dinesh

27

¿por qué complicar las cosas?

foreach($array as $k=>$v) { 
    $new[$k] = $v['username']; 
} 
2

Si está usando PHP 5.3 se puede hacer uso de array_walk_recursive y un cierre (el cierre puede ser reemplazada por una función normal si su versión de PHP < 5.3):

function arrayFlatten(array $array) { 
    $flatten = array(); 
    array_walk_recursive($array, function($value) use(&$flatten) { 
     $flatten[] = $value; 
    }); 

    return $flatten; 
} 

$nested = array(
    array('username' => 'John'), 
    array('username' => 'Joe'), 
    array('username' => 'Jake'), 
); 

$flattened = arrayFlatten($nested); 

var_dump($flattened) 

array 
    0 => string 'John' (length=4) 
    1 => string 'Joe' (length=3) 
    2 => string 'Jake' (length=4) 
+0

La función arrayFlatten (array $ array) debe ser arrayFlatten (array $ anidado). – user1794918

0
$new = array_map(create_function('$auser', 'return $auser["username"];'), $array); 

Si el uso de objetos que sólo podría cambiar return $auser["username"];-return $auser->get_username();

0

Prueba este código:

foreach ($arr as $key => $val) 
{ 
    sort($val); 
    $new = array_merge($val, $new); 
} 
print_r ($new); 
0

Prueba esto:

$list=array(); 
foreach($array as $v) { 
    array_push($list, $v['username']); 
} 
0

Si no se preocupan por las teclas:

$new_array = array(); 

foreach($array as $v) { 

    $new_array[] = $v['username'] 
} 
2
$new_array = array_column($last_array, 'username'); 
0

Para aquellos que están usando composer:

  1. si < = php5.5 array_column se puede usar
  2. if> php5.5 polyfills disponibles como https://github.com/symfony/polyfill/tree/master/src/Php55 pueden ser utilizados. Una vez que composer install symfony/polyfill-php55, puede simplemente llamar al array_column como si su php5.4 o inferior lo tuviera.
Cuestiones relacionadas