我有一个包含动态数量元素的数组(它是用户生成的单词列表)。
我希望能够随时将数组元素除以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;
}
如何修复此代码,或者更好的是,如何更有效地执行此操作?
答案 0 :(得分:1)
在while循环中执行此操作,这样您就不会有进行函数调用的开销。
while(count($myArray) % $lineLimit !=0){
$myArray[] = '';
}
答案 1 :(得分: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, ""));
而不是循环,使其更快。
可以找到这种方法的演示here。