TMTOWTDI。複雑さの順にいくつかのソリューションを次に示します。
(複雑さについての簡単な説明が続きます):O(n)
または、「大きな o」は配列内の要素の数を意味する最悪のシナリオを意味し、 「小さな o」は最良のシナリオを意味します。長い離散数学の話を簡単に言うと、最悪のシナリオ のみを心配する必要があり、それがまたはでないことを確認してください。これは、全体の計算時間というよりも、増加に伴う計算時間の変化の尺度です。ウィキペディアには、計算に関する別名時間の複雑さに関する優れた記事があります。n
o(n)
n ^ 2
n!
n
経験から学んだことがあるとすれば、それは、プログラムのほとんどを最適化するために多くの時間を費やすことは、何かをより良くするために費やすべき時間の無駄だということです。
解決策 0:O(n) / o(1)
複雑さ:
このソリューションには、1 回の比較 - ループによる 1 回の反復という最良のシナリオがありますが、一致する値が配列の位置 0 にある場合のみです。最悪のシナリオは、配列にないため、配列のすべての要素を反復処理する必要があることです。
foreach ($my_array as $sub_array) {
if (@$sub_array['id'] === 152) {
return true;
}
}
return false;
解決策 1:O(n) / o(n)
複雑さ:
このソリューションは、一致する値がどこにあるかに関係なく、配列全体をループする必要があるため、常にn
配列の反復になります。
return 0 < count(
array_filter(
$my_array,
function ($a) {
return array_key_exists('id', $a) && $a['id'] == 152;
}
)
);
解決策 2:O(n log n) / o(n log n)
複雑さ:
ハッシュの挿入は、のlog n
由来です。n
ハッシュ挿入 = n * log n
. 最後に別のハッシュ ルックアップがありますがlog n
、それは含まれていません。
$existence_hash = [];
foreach ($my_array as $sub_array) {
$existence_hash[$sub_array['id']] = true;
}
return @$existence_hash['152'];