2011-11-02 9 views
5

Esto es más una solicitud de un consejo rápido ya que, me resulta muy difícil creer que no hay una función nativa para la tarea en cuestión. Considere lo siguiente:matriz de PHP. Simple split basado en la clave

array => 
(0) => array("id" => "1", "groupname" => "fudge", "etc" => "lorem ipsum"), 
(1) => array("id" => "2", "groupname" => "toffee", "etc" => "lorem ipsum"), 
(2) => array("id" => "3", "groupname" => "caramel", "etc" => "lorem ipsum") 
) 

Lo que estoy buscando a conseguir es una nueva matriz que utiliza sólo "nombre de grupo", por lo que equivaldría:

array => 
(0) => "fudge", 
(1) => "toffee", 
(2) => "caramel" 
) 

Sé que esto es muy fácil de lograr de forma recursiva pasar por el matriz original, pero me preguntaba si hay una manera mucho más simple de lograr el resultado final. He mirado alrededor de la Internet y en el manual de PHP y no puedo encontrar nada

Gracias amablemente por leer esta pregunta Simon

Respuesta

6

Si está usando PHP 5.3, puede utilizar array_map[docs] así:

$newArray = array_map(function($value) { 
    return $value['groupname']; 
}, $array); 

De lo contrario, cree una función normal y pase su nombre (consulte la documentación).

Otra solución es iterar poco más de la matriz:

$newArray = array(); 

foreach($array as $value) { 
    $newArray[] = $value['groupname']; 
} 

Definitivamente no tiene que utilizar la recursividad.

+0

array_map! muchas gracias por responder tan puntualmente. Iteración es lo que quise decir en lugar de recursión, disculpas. Cosas buenas :) – Simon

+0

@Simon: No hay problema :) ¡Feliz codificación! –

0

Por lo que sé que no hay una función simple en PHP que pueda manejar esto por ti, la estructura de la matriz está definida por el usuario, deberías recorrer la matriz. La forma más fácil se me ocurre sería algo como esto:

for($i = 0;$i < count($main_array);$i++){ 
    $groupname_array[] = $main_array[$i]["groupname"]; 
} 
0
function array_get_keys(&$array, $key) { 
    foreach($array as &$value) $value = $value[$key]; 
} 
array_get_keys($array, 'groupname'); 

o

function array_get_keys(&$array, $key) { 
    $result = Array(); 
    foreach($array as &$value) $result[] = $value[$key]; 
    return $result; 
} 
$new_array = array_get_keys($array, 'groupname'); 
1

Uso array_map:

<?php 
$a = array(
    array("id" => "1", "groupname" => "fudge", "etc" => "lorem ipsum"), 
    array("id" => "2", "groupname" => "toffee", "etc" => "lorem ipsum"), 
    array("id" => "3", "groupname" => "caramel", "etc" => "lorem ipsum") 
); 

function get_groupname($arr) 
{ 
    return $arr['groupname']; 
} 
$b = array_map('get_groupname', $a); 

var_dump($a); 
var_dump($b); 

http://codepad.org/7kNi8nNm

3

No es un nativo array_column() funcionan exactamente para esto (a partir de PHP 5.5):

$column = array_column($arr, 'groupname'); 
1

valores de todas las claves de la matriz:

$array = [ 
    ["id"=>"1","user"=>"Ivan"], 
    ["id"=>"2","user"=>"Ivan"], 
    ["id"=>"3","user"=>"Elena"] 
    ]; 

$res = []; 
$array_separate = function($value, $key) use (&$res){ 
    foreach($value AS $k=>$v) { 
     $res[$k][] = $v; 
    } 
}; 

array_walk($array, $array_separate); 
print_r($res); 

resultado:

Array 
(
    [id] => Array 
     (
      [0] => 1 
      [1] => 2 
      [2] => 3 
     ) 
    [user] => Array 
     (
      [0] => Ivan 
      [1] => Ivan 
      [2] => Elena 
     ) 

) 

http://sandbox.onlinephpfunctions.com/code/3a8f443283836468d8dc232ae8cc8d11827a5355

Cuestiones relacionadas