2010-09-13 14 views
7

Ich habe eine einfache, zweidimensionale Anordnung wie folgt aus:Entfernen „Spalten“ aus den Sub-Arrays von einer zweidimensionalen Anordnung

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

Ich versuche, eine effiziente Funktion zu schreiben, die mit nur ein Array zurück das erste 'n' Spalten jedes Subarrays. Mit anderen Worten, wenn n = 2, dann wäre das zurückgegebene Array sein:

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


      ) 

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

      ) 

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

      ) 
    ) 
+0

Sie sind unwahrscheinlich, dass eine bessere Antwort als Nikic ist zu finden. –

Antwort

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

+1, das ist so sauber wie es nur geht. – casablanca

+0

+1 Was ist so 5.3-spezifisch darüber? –

+1

@hopeseekr: Du hast Recht '& $ Element' ist ab PHP 5 verfügbar. Aus irgendeinem Grund dachte ich, es wurde in PHP 5.3 eingeführt. – NikiC

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

Nicht sicher, ob es eine effizientere Methode.

0

Alles falsch mit nur Durchschleifen?

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

Auch bei array_walk:

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