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 に答える