みたいな話をどっかで読んだ記憶があって、参考書をひっくり返したり検索したりしていたのだけど、自分の記憶にある文章がどうしても見つからなくて時間を使ってしまっていた…で、気付いた、そんなの自分でコード書いてベンチ取ればいいじゃん。ですよね。もし後日他の実装案が見つかったら追加すれば良いんだし。
といわけで、比べてみる。比較方法は次の2つ。
- if(count($array)) { return true; }
- if(!empty($array)) { return true; }
また$arrayが配列と解っている場合には、次でも空配列かどうかを判断できます。
- if($array) { return true; }
もちろん、$arrayが配列である事を確認するコストを含んでいないので参考で。
Pear::Benchmarkを使って取ったベンチマークは以下の通り。
ベンチマークに利用したコード
require_once 'Benchmark/Iterate.php';
$benchmark = new Benchmark_Iterate();
$a0 = null;
$a1 = array();
$a2 = array(0);
$benchmark->run(10000, 'count_test', array($a1));
$result = $benchmark->get(true);
var_dump($result['mean'] * $result['iterations']);
$benchmark->run(10000, 'empty_test', array($a1));
$result = $benchmark->get(true);
var_dump($result['mean'] * $result['iterations']);
$benchmark->run(10000, 'a_test', array($a1));
$result = $benchmark->get(true);
var_dump($result['mean'] * $result['iterations']);
function count_test($array) { return (count($array)) ? true : false; }
function a_test($array) { return ($array) ? true : false; }
function empty_test($array) { return (!empty($array)) ? true : false; }
ベンチマークの結果
1回目
count($array) | 0.2113 |
---|---|
!empty($array) | 0.1820 |
($array) | 0.1815 |
2回目
count($array) | 0.2091 |
---|---|
!empty($array) | 0.1849 |
($array) | 0.1857 |
3回目
count($array) | 0.2041 |
---|---|
!empty($array) | 0.1860 |
($array) | 0.1839 |
4回目
count($array) | 0.2057 |
---|---|
!empty($array) | 0.1850 |
($array) | 0.1829 |
5回目
count($array) | 0.2092 |
---|---|
!empty($array) | 0.1870 |
($array) | 0.1876 |
countを使うよりもemptyで比較した方が平均で大体11%程度高速なようです。
参考案も大体同じくらい、ただまぁこれは…文字列も通しちゃうのでアレですな。
というわけで、チェックはemptyでやりましょうというアレで。
ああ、そうだったそうだった。