大部分人會使用數(shù)組array_unique()
來去除數(shù)組中的重復值,這么干是可以達到目的脖捻,不過比較低效阔逼,更為高效的方法是使用函數(shù)array_flip()
。例證:
$arr_origin = ['China', 'America', 'Russia', 'England', 'France'];
$arr_test = [];
for ($i = 0;$i < 100;$i++ ) {
$arr_test[] = $arr_origin[rand(0, 4)];
}
$time_start_one = microtime(true);
for ($i = 0;$i < 10000;$i++) {
array_unique($arr_test);
}
$time_end_one = microtime(true);
echo 'array_unique()所用時間為:'.($time_end_one - $time_start_one);
echo '<br />';
$time_start_two = microtime(true);
for ($i = 0;$i < 10000;$i++) {
array_flip(array_flip($arr_test));
}
$time_end_two = microtime(true);
echo 'array_flip()所用時間為:'.($time_end_two - $time_start_two);
運行以上代碼三次得到結(jié)果為:
第一次.png
第二次.png
第三次.png
有興趣的同學可以多運行幾次地沮,結(jié)果基本是穩(wěn)定的嗜浮,毫無疑問我們可以得出結(jié)論:array_flip()
要比array_unique()
更高效。
為什么array_flip()
要比array_unique()
更高效呢摩疑?筆者沒有去研究源代碼危融,個人覺得跟這兩個函數(shù)的運行機制有關(guān)系。array_flip()
是將數(shù)組的鍵和值相互交換雷袋,在php中數(shù)組的鍵是不能重復的吉殃,如果重復則后面的元素會覆蓋前面的元素,這樣就把原來值重復的項只保留了最后一個楷怒,再次調(diào)用array_flip()
函數(shù)將鍵和值再次交換得到去除重復值的數(shù)組蛋勺。array_unique()
去除數(shù)組重復值應(yīng)該是用到了遍歷,所以它的效率會比array_flip()
差很多鸠删。