1

我有一个包含动态元素数量的数组(它是用户生成的单词列表)。

我希望能够随时将数组元素除以 3:

我的想法是计算数组中的元素(使用count($myArray)),如果模数 != 0 我会递归地添加元素,直到它完成为止。

这是我的代码:

function adjustArray($myArray, $lineLimit = 3){
    $count = count($myArray);

    if ($count % $lineLimit != 0):
        $myArray[] = '';
        adjustArray($myArray, $lineLimit);

    else:
        return $myArray; //problem when returning is conditional (return won't work - returns NULL
    endif;

}

我怎样才能修复这个代码,或者更好的是,我怎样才能更有效地做到这一点?

4

2 回答 2

1

在 while 循环中执行此操作,这样您就没有进行函数调用的开销。

while(count($myArray) % $lineLimit !=0){
  $myArray[] = '';
}
于 2013-01-07T01:10:50.197 回答
1

这里不需要递归。只需添加所需的元素数量即可使长度成为 3 的倍数:

function adjustArray($myArray, $lineLimit = 3){
    $count = count($myArray);

    if ($count % $lineLimit != 0){
        for($i = 0; $i < $lineLimit - $count % $lineLimit; $i++)
            $myArray[] = "";
    }   

    return $myArray;
}

这是一个演示:http ://codepad.org/6viL1peq

或者,您可以使用:

$myArray = array_merge($myArray, array_fill(0, $lineLimit - $count % $lineLimit, ""));

而不是循环,以使其更快。

可以在此处找到此方法的演示。

于 2013-01-07T01:11:10.170 回答