O(n)
すべての要素がルールに準拠していることを確認する必要があるため、決して勝つことはできないと思います。以下は、各要素を一度チェックO(n)
して削除し、整数でない場合は単純な比較を行います。
ただし、ストレージの複雑さが若干大きくなります (フィルター処理された配列を格納する必要があります)。
O(n)
は複雑さの表現です。この場合、n
各要素を一度に調べる必要があるため、複雑さは (配列内の要素の数) です。
たとえば、すべての数値を他のすべての数値で乗算したい場合、複雑さはO(n^2)
各要素とほぼ同じで、他の要素を調べる必要があります (ただし、これは貧弱な例です)。
Big O Notationと呼ばれる詳細については、このガイドを参照してください。
ただし、以下を試してください(前の質問から適応)
if($only_integers === array_filter($only_integers, 'is_int')); // true
if($letters === array_filter($letters, 'is_int')); // false
その後、次のことができます
/**
* Test array against provided filter
* testFilter(array(1, 2, 'a'), 'is_int'); -> false
*/
function testFilter($array, $test) {
return array_filter($array, $test) === $array;
}