-2

重複の可能性:
配列に数値(整数)のみが含まれているかどうかを確認するためのより簡潔な方法

一次元配列のすべての値がintsであることを確認する方法はありますか?

私にできる最善のことは

function checkArray($array) {

    foreach($array as $value) {

        if (!is_int($value)) return false;
    }

    return true;
}

もっと簡潔で事前に構築された方法があるのではないかと思います。そのような方法はis_int_array()私にはわからないかもしれません。

4

1 に答える 1

2

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;
}
于 2012-09-10T18:30:51.330 に答える