2010-09-13 16 views
7

mam prostą, dwuwymiarową tablicą tak:Usuń „kolumny” subarrays o dwuwymiarowej tablicy

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

Próbuję napisać efektywne funkcję która będzie zwracać tablicę z tylko pierwsze 'n' kolumny każdej podprzestrzeni. Innymi słowy, jeśli n = 2, to zwracana tablica będzie:

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


      ) 

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

      ) 

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

      ) 
    ) 
+0

Jesteś mało prawdopodobne, aby znaleźć lepszą odpowiedź niż Nikić jest. –

Odpowiedz

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

+1, to jest tak czyste, jak to tylko możliwe. – casablanca

+0

+1 Co takiego jest w specyfikacji 5.3? –

+1

@hopeseekr: Masz rację '& $ element' jest dostępny od PHP 5. Z jakiegoś powodu myślałem, że został wprowadzony w PHP 5.3. – NikiC

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

nie wiem, czy jest bardziej wydajny sposób.

0

Coś nie tak z samą pętlą przez to?

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

Nawet array_walk:

array_walk(
    $aYourArray, 
    function(&$aSubRow){ 
     $aSubRow = array_slice($aSubRow, 0, 2); 
    } 
); 
Powiązane problemy