2013-06-18 14 views
5

Ho una matrice multidimensionale, che ha detto, x numero di colonne e y numero di righe.Ottieni tutti i valori di una colonna specifica in una matrice multidimensionale

Voglio specificamente tutti i valori nella 3a colonna.

Il modo più ovvio per andare a fare questo è quello di mettere questo in un ciclo for come questo

for(i=0;i<y-1;i++) 
{ 
    $ThirdColumn[] = $array[$i][3]; 
} 

ma c'è una complessità tempo evidente di O (n) coinvolti qui. C'è un costruito in modo per me per estrarre semplicemente ciascuna di queste righe della matrice senza dover loop in.

Per esempio (questo non funziona offcourse)

$ThirdColumn = $array[][3] 
+2

Forse se si deve [trasporre] (http://stackoverflow.com/questions/ 797251/trasposizione-multidimensionale-array-in-php) vero? – DaoWen

+0

No, qualsiasi iterazione di questa idea, conterrà almeno un ciclo for da qualche parte ... è inevitabile – KyleK

+0

Pubblica un print_r del tuo array – KyleK

risposta

1

Prova questo ....

foreach ($array as $val) 
    { 
     $thirdCol[] = $val[2]; 
    } 

Youll endup con una serie di tutti i valori dal 3 colonna

+2

questo è fuori rotta, quello che ho dichiarato nel mio post come il modo ovvio per farlo è foreach looping, ma grazie comunque –

0

Si potrebbe provare questo:

$array["a"][0]=10; 
$array["a"][1]=20; 
$array["a"][2]=30; 
$array["a"][3]=40; 
$array["a"][4]=50; 
$array["a"][5]=60; 

$array["b"][0]="xx"; 
$array["b"][1]="yy"; 
$array["b"][2]="zz"; 
$array["b"][3]="aa"; 
$array["b"][4]="vv"; 
$array["b"][5]="rr"; 

$output = array_slice($array["b"], 0, count($array["b"])); 

print_r($output); 
2

C'è un costruito in modo per me per estrarre semplicemente ciascuna di queste righe della matrice senza dover loop in.

Non

ancora. Lì sarà una funzione presto denominata array_column(). Tuttavia, la complessità sarà la stessa, è solo un po 'più ottimizzata perché è implementata in C e all'interno del motore PHP.

0

Un altro modo per fare lo stesso sarebbe qualcosa come $newArray = array_map(function($a) { return $a['desiredColumn']; }, $oldArray); sebbene non ritenga che ciò comporterà alcun significativo (se nessuno) miglioramento delle prestazioni.

16

Dato un allineamento bidimensionale $channels:

$channels = array(
    array(
     'id' => 100, 
     'name' => 'Direct' 
    ), 
    array(
     'id' => 200, 
     'name' => 'Dynamic' 
    ) 
); 

Un bel modo sta usando array_map:

$_currentChannels = array_map(function ($value) { 
    return $value['name']; 
}, $channels); 

e se sei un potentato (PHP 5.5 +) attraverso array_column:

$_currentChannels = array_column($channels, 'name'); 

Entrambi i risultati:

ospiti
Array 
(
    [0] => Direct 
    [1] => Dynamic 
) 

Stelle: array_map (PHP4 +) e array_column (php5.5 +)

// array array_map (callable $callback , array $array1 [, array $... ]) 
// array array_column (array $array , mixed $column_key [, mixed $index_key = null ]) 
Problemi correlati