function fast_in_array($elem, $array)
{
$top = count($array) -1;
$bot = 0;
while($top >= $bot)
{
$p = floor(($top + $bot) / 2);
if ($array[$p] < $elem) $bot = $p + 1;
elseif ($array[$p] > $elem) $top = $p - 1;
else return TRUE;
}
return FALSE;
}
用数组改变你的所有能改变的控制结构。这不仅包括三元运算符,还有:if,switch。这还有另一好处,那就是能培养你的软编码模式的思维。
Instead of
$class = $class == 'even' ? 'odd' : 'even'
we have
$flip = array('even' => 'odd', 'odd' => 'even');
$class = $flip[$class];
示例:
header("content-type:text/html;charset=utf-8");
/**
* array_walk 和 foreach, for 的效率的比较。
* 我们要测试的是foreach, for, 和 array_walk的效率的问题。
*/
//产生一个10000的一个数组。
$max = 10000;
$test_arr = range(0, $max);
$temp = 0;
//我们分别用三种方法测试求这些数加上1的值的时间。
// for 的方法
$t1 = microtime(true);
for ($i = 0; $i < $max; $i++) {
$temp = $temp + 1;
}
$t2 = microtime(true);
$t = $t2 - $t1;
echo "就使用for, 没有对数组操作 花费: {$t}
";
$t1 = microtime(true);
for ($i = 0; $i < $max; $i++) {
$test_arr[$i] = $test_arr[$i] + 1;
}
$t2 = microtime(true);
$t = $t2 - $t1;
echo "使用for 并且直接对数组进行了操作 花费: {$t}
";
$t1 = microtime(true);
for ($i = 0; $i < $max; $i++) {
addOne($test_arr[$i]);
}
$t2 = microtime(true);
$t = $t2 - $t1;
echo "使用for 调用函数对数组操作 花费 : {$t}
";
$t1 = microtime(true);
foreach ($test_arr as $k => &$v) {
$temp = $temp + 1;
}
$t2 = microtime(true);
$t = $t2 - $t1;
echo "使用 foreach 没有对数组操作 花费 : {$t}
";
$t1 = microtime(true);
foreach ($test_arr as $k => &$v) {
$v = $v + 1;
}
$t2 = microtime(true);
$t = $t2 - $t1;
echo "使用 foreach 直接对数组操作 : {$t}
";
$t1 = microtime(true);
foreach ($test_arr as $k => &$v) {
addOne($v);
}
$t2 = microtime(true);
$t = $t2 - $t1;
echo "使用 foreach 调用函数对数组操作 : {$t}
";
$t1 = microtime(true);
array_walk($test_arr, 'addOne');
$t2 = microtime(true);
$t = $t2 - $t1;
echo "使用 array_walk 花费 : {$t}
";
function addOne(&$item) {
$item = $item + 1;
}
结果:
就使用for, 没有对数组操作 花费: 0.003000020980835
使用 foreach 没有对数组操作 花费 : 0.002000093460083
使用for 并且直接对数组进行了操作 花费: 0.0039999485015869
使用 foreach 直接对数组操作 : 0.0019998550415039
使用for 调用函数对数组操作 花费 : 0.53900003433228
使用 foreach 调用函数对数组操作 : 0.54800009727478
使用 array_walk 花费 : 0.56699991226196
/**
* Simple function to replicate PHP 5 behaviour
*/
function microtime_float()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
$start=microtime_float();
// standard string append
$str = '';
for ($i = 300000; $i > 0; $i--) {
$str .= 'String concatenation. ';
}
$end = microtime_float();
echo("
t i m e :" . round( $end - $start ,2) ."
");
$start=microtime_float();
// array join
$str = '';
$sArr = array();
for ($i = 300000; $i > 0; $i--) {
$sArr[] = 'String concatenation. ';
}
$str = implode('',$sArr);
$end = microtime_float();
echo("
t i m e :" . round( $end - $start ,2) ."
");
结果:
t i m e :0.12
t i m e :0.22
2)字符串替换
sprintf 快于 str_replace 快于 preg_replace 快于 strstr
3)字符串查找
strpos 快于 preg_match 快于 strstr 快于 ereg
4)字符串输出
echo 快于 print
echo "Hello $foo, welcome on my blog.";
echo "Hello " . $foo . " welcome on my blog.";
echo 'Hello ' . $foo . ' welcome on my blog.';
echo 'Hello ', $foo , ' welcome on my blog.';