判斷元素是否存時,使用isset會比in_array快得多
阿新 • • 發佈:2018-01-26
存在 blog exist end ray 判斷 val 準備 結果
情境
有時候,我們需要判斷一個元素是否存在於已有數據中(以此來獲得非重復值),這時候,使用isset來判斷會比in_array快得多很多!!
測試
1)準備測試數據
$exists_a = []; $exists_b = []; $check = []; for ($i=0,$len=100000; $i<$len; $i++) { $check[] = $i; } for ($i=0,$len=10000; $i<$len; $i++) { $rnd = round(0,100000); $exists_a[] = $rnd; $exists_b[$rnd] = 1; }
2)使用in_array做判斷驗證
$result = []; $start_time = microtime(true); foreach ($check as $key => $value) { if (!in_array($value, $exists_a)) { $result[] = $value; } } $end_time = microtime(true); echo ‘使用in_array驗證元素是否存在耗時:‘ . ($end_time - $start_time), ‘秒<hr/>‘;
結果:// 使用in_array驗證元素是否存在耗時:10.537812948227秒
3)使用isset做判斷驗證
$result = []; $start_time = microtime(true); foreach ($check as $key => $value) { if (!isset($exists_b[$value])) { $result[] = $value; } } $end_time = microtime(true); echo ‘使用isset驗證元素是否存在耗時:‘ . ($end_time - $start_
結果:// 使用isset驗證元素是否存在耗時:0.018424034118652秒
補充
使用 array_key_exists 判斷
<?php $exists = []; $check = []; for ($i=0,$len=100000; $i<$len; $i++) { $check[] = $i; } for ($i=0,$len=10000; $i<$len; $i++) { $rnd = round(0,100000); $exists[$rnd] = $rnd; } $result = []; $start_time = microtime(true); foreach ($check as $key => $value) { if (array_key_exists($value, $exists)) { $result[] = $value; } } $end_time = microtime(true); echo ‘使用array_key_exists驗證元素是否存在耗時:‘ . ($end_time - $start_time), ‘秒<hr/>‘; ?>
結果:// 使用array_key_exists驗證元素是否存在耗時:0.022138833999634秒
總結
盡量少用in_array,isset 和 array_key_exists 會比 in_array 快得多很多!!
判斷元素是否存時,使用isset會比in_array快得多