2010-09-13 20 views
7

Tengo un simple, matriz bidimensional de esta manera:"columnas" de las submatrices de una matriz bidimensional

Array 
    (
     [0] => Array 
      (
       [0] => abc 
       [1] => 123 
       [2] => aaaaa 

      ) 

     [1] => Array 
      (
       [0] => def 
       [1] => 456 
       [2] => ddddd 
      ) 

     [2] => Array 
      (
       [0] => ghi 
       [1] => 789 
       [2] => hhhhhhh 
      ) 
    ) 

estoy tratando de escribir una función eficiente que devolverá una matriz con sólo el primeras 'n' columnas de cada subcampo. En otras palabras, si n = 2, entonces la matriz devuelta sería:

Array 
    (
     [0] => Array 
      (
       [0] => abc 
       [1] => 123 


      ) 

     [1] => Array 
      (
       [0] => def 
       [1] => 456 

      ) 

     [2] => Array 
      (
       [0] => ghi 
       [1] => 789 

      ) 
    ) 
+0

Es poco probable encontrar una respuesta mejor que Nikic de. –

Respuesta

16
const MAX = 2; // maximum number of elements 
foreach ($array as &$element) { 
    $element = array_slice($element, 0, MAX); 
} 
+2

+1, esto es lo más limpio posible. – casablanca

+0

+1 ¿Qué tiene 5.3-specific al respecto? –

+1

@hopeseekr: Tiene razón, '& $ element' está disponible a partir de PHP 5. Por alguna razón, pensé que se introdujo en PHP 5.3. – NikiC

0
foreach($array as $key=> $element) 
{ 
    for($i=0; $i<$n; $i++) 
    { 
     $newArray[$key][$i] = $element[$i]; 
    } 
} 

No estoy seguro si hay un método más eficiente.

0

¿Algún problema con just looping through it?

for ($i = 0; $i < sizeof($input); $i++) { 
    for ($j = 0; $j < $n; $j++) { 
     $output[$i][$j] = $input[$i][$j]; 
    } 
} 
return $output; 
0

Incluso con array_walk:

array_walk(
    $aYourArray, 
    function(&$aSubRow){ 
     $aSubRow = array_slice($aSubRow, 0, 2); 
    } 
); 
Cuestiones relacionadas