2010-09-13 93 views
7

我有一個簡單,二維數組是這樣的:從二維陣列的子陣列刪除「列」

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

我試圖寫一個有效的功能,這將返回一個數組只用每個子陣列的第一個'n'列。換句話說,如果n = 2,則返回的數組將是:

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


      ) 

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

      ) 

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

      ) 
    ) 
+0

你不可能找到比nikic的一個更好的答案。 – 2010-09-13 16:57:17

回答

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

+1,這是乾淨的,因爲它得到。 – casablanca 2010-09-13 16:56:31

+0

+1什麼是5.3特定的? – 2010-09-13 16:56:36

+1

@hopeseekr:你是對的'&$ element'從PHP 5開始提供。出於某種原因,我認爲它是在PHP 5.3中引入的。 – NikiC 2010-09-13 16:59:53

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

不知道是否有一個更有效的方法。

0

只是循環通過它有什麼問題嗎?

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

即使array_walk:

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