2011-11-02 13 views
5

Questa è più una richiesta per un rapido consiglio dato che trovo molto difficile credere che non esista una funzione nativa per il compito in questione. Si consideri il seguente:array PHP. Semplice suddivisione basata sul tasto

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") 
) 

Quello che sto cercando di ottenere è un nuovo array che utilizza solo "GROUPNAME" così sarebbe uguale:

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

So che questo è molto semplice da realizzare in modo ricorsivo passare attraverso il array originale, ma mi chiedevo se c'è un modo molto più semplice per raggiungere il risultato finale. Ho guardato su Internet e sul manuale di PHP e non riesco a trovare nulla

Grazie gentilmente per aver letto questa domanda Simon

risposta

6

Se si utilizza PHP 5.3, è possibile utilizzare array_map[docs] in questo modo:

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

In caso contrario, creare una funzione normale e passarne il nome (consultare la documentazione).

Un'altra soluzione è quella di iterare appena oltre la matrice:

$newArray = array(); 

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

Lei sicuramente non c'è bisogno di usare la ricorsione.

+0

array_map! grazie mille per aver risposto così puntualmente. L'iterazione è ciò che intendevo dire invece della ricorsione, le scuse. Roba buona :) – Simon

+0

@Simon: Nessun problema :) Buona programmazione! –

0

Per quanto ne so, non esiste una semplice funzione in PHP che possa gestire ciò per te, la struttura dell'array è definita dall'utente, dovresti scorrere l'array. Il modo più semplice che posso pensare sarebbe qualcosa di simile:

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

C'è un nativoarray_column() funzione proprio per questo (da PHP 5.5):

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

valori di tutte le chiavi dell'array:

$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); 

risultato:

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

) 

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

Problemi correlati