从二维数组的子数组中删除“列”

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

            )
    )

您很难找到比nikic的更好的答案。 - Theodore R. Smith
4个回答

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

1
@hopeseekr:你说得对,&$element 在 PHP 5 中就已经存在了。出于某种原因,我以为它是在 PHP 5.3 中引入的。 - NikiC

0

即使使用 array_walk:

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

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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接