|
|
|
|
|
我寫了個(gè)函數(shù),可以實(shí)現(xiàn)在數(shù)組中找出以某字符串開頭的值。
public static function arrayContainsValueStartingBy($haystack, $needle) {
$len = strlen($needle);
foreach ($haystack as $hay) {
if (substr($hay, 0, $len) == $needle) {
return true;
}
}
return false;
}
但我覺得它還有優(yōu)化的空間。
優(yōu)化建議一:
可以測評如下代碼看看是否有什么不同(它可能更差,視字符串大小而定),但是可以用strpos代替substr:
public static function arrayContainsValueStartingBy($haystack, $needle) {
foreach ($haystack as $hay) {
if (strpos($hay, $needle) === 0) {
return true;
}
}
return false;
}
另外需要注意的是,盡可能早的停止迭代。
優(yōu)化建議二:
使用array_filter,不知道循環(huán)會(huì)否更快呢,看如下代碼:
$testArray = array('Hello',
'World',
'Aardvark',
'Armadillo',
'Honey Badger'
);
$needle = 'A';
class beginsWith {
private $_needle = NULL;
function __construct($needle) {
$this->_needle = $needle;
}
public function filter($string) {
return (strpos($string, $this->_needle) === 0);
}
}
$matches = array_filter($testArray, array(new beginsWith($needle), 'filter'));
var_dump($matches);