2010-09-13 138 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); 
    } 
);