PHP常用算法实现

冒泡排序

function bubble_sort($arr) {
    $n = count ( $arr );
    for($i = 0; $i < $n - 1; $i ++) {
        for($j = $i + 1; $j < $n; $j ++) {
            if ($arr [$j] < $arr [$i]) {
                $temp = $arr [$i];
                $arr [$i] = $arr [$j];
                $arr [$j] = $temp;
            }
        }
    }
    return $arr;
}

归并排序

function Merge(&$arr, $left, $mid, $right) {
    $i = $left;
    $j = $mid + 1;
    $k = 0;
    $temp = array ();
    while ( $i <= $mid && $j <= $right ) {
        if ($arr [$i] <= $arr [$j])
            $temp [$k ++] = $arr [$i ++];
        else
            $temp [$k ++] = $arr [$j ++];
    }
    while ( $i <= $mid )
        $temp [$k ++] = $arr [$i ++];
    while ( $j <= $right )
        $temp [$k ++] = $arr [$j ++];
    for($i = $left, $j = 0; $i <= $right; $i ++, $j ++)
        $arr [$i] = $temp [$j];
}
           
function MergeSort(&$arr, $left, $right) {
    if ($left < $right) {
        $mid = floor ( ($left + $right) / 2 );
        MergeSort ( $arr, $left, $mid );
        MergeSort ( $arr, $mid + 1, $right );
        Merge ( $arr, $left, $mid, $right );
    }
}

二分查找-递归

function bin_search($arr, $low, $high, $value) {
    if ($low > $high)
        return false;
    else {
        $mid = floor ( ($low + $high) / 2 );
        if ($value == $arr [$mid])
            return $mid;
        elseif ($value < $arr [$mid])
            return bin_search ( $arr, $low, $mid - 1, $value );
        else
            return bin_search ( $arr, $mid + 1, $high, $value );
    }
}

二分查找-非递归

function bin_search($arr, $low, $high, $value) {
    while ( $low <= $high ) {
        $mid = floor ( ($low + $high) / 2 );
        if ($value == $arr [$mid])
            return $mid;
        elseif ($value < $arr [$mid])
            $high = $mid - 1;
        else
            $low = $mid + 1;
    }
    return false;
}

快速排序

function quick_sort($arr) {
    $n = count ( $arr );
    if ($n <= 1)
        return $arr;
    $key = $arr [0];
    $left_arr = array ();
    $right_arr = array ();
    for($i = 1; $i < $n; $i ++) {
        if ($arr [$i] <= $key)
            $left_arr [] = $arr [$i];
        else
            $right_arr [] = $arr [$i];
    }
    $left_arr = quick_sort ( $left_arr );
    $right_arr = quick_sort ( $right_arr );
    return array_merge ( $left_arr, array ($key ), $right_arr );
}

选择排序

function select_sort($arr) {
    $n = count ( $arr );
    for($i = 0; $i < $n; $i ++) {
        $k = $i;
        for($j = $i + 1; $j < $n; $j ++) {
            if ($arr [$j] < $arr [$k])
                $k = $j;
        }
        if ($k != $i) {
            $temp = $arr [$i];
            $arr [$i] = $arr [$k];
            $arr [$k] = $temp;
        }
    }
    return $arr;
}

插入排序

function insertSort($arr) {
    $n = count ( $arr );
    for($i = 1; $i < $n; $i ++) {
        $tmp = $arr [$i];
        $j = $i - 1;
        while ( $arr [$j] > $tmp ) {
            $arr [$j + 1] = $arr [$j];
            $arr [$j] = $tmp;
            $j --;
            if ($j < 0)
                break;
        }
    }
    return $arr;
}

均为转载,分享专用。

FreeBSD 9.0 ports 安装apache+mysql+php过程笔记

虽然说是装了N次的apache、mysql、php运行环境了,没有把他们总结起来,在bsd上面我最喜欢就是ports安装了,当然也有童鞋习惯源码安装,那就看个人喜好了,你要相信负责ports包源的人不是那么烂。什么情况下自己源码安装,诸如编译一些特定的修改过的XX。不说了直接开始。

由于我们在天国,所以我还是十分有必要提醒各位童鞋添加ports天国源吧,省了你很多时间

//请注意这个make.conf文件 如果不存在请自行新建

vi /etc/make.conf

然后在里面写上这句代码 请注意只有两行请勿随意换行(我一直都用freebsdchina.org的源很快,适合天国童鞋使用)

MASTER_SITE_BACKUP?=http://mirrors.163.com/FreeBSD/ports/distfiles/${DIST_SUBDIR}/
MASTER_SITE_OVERRIDE?=${MASTER_SITE_BACKUP}

然后为了我们使用的软件是最新最好的软件,最好进行更新下ports里面的软件版本数据库

portsnap fetch&&portsnap extract&&portsnap update

当你执行这条命令的时候,恭喜你!你现在可以去泡杯茶来慢慢品尝,这个时间估计在10-30分钟左右,具体还要看你的网络条件。好搞定上面的工作之后就开始我们的安装之旅了

1、首先安装Apache

继续阅读FreeBSD 9.0 ports 安装apache+mysql+php过程笔记

PHP常用头信息

有时候我们在写Web程序时候比如用户执行了某些非法操作或者跳转某个区域的服务时候我有必要采用PHP 的header()函数来进行实现我们的业务逻辑了。

下面就是我自己收集的几种常用的header()信息

1、404错误(可以伪装成页面没有找到,跳转到Webserver指定的错误页显示)

<?php 
    //404页面没有找到
    header('HTTP/1.1 404 Not Found');
?>

2、301跳转(301重定向,301转向。指的是当用户点击一个网址时,通过技术手段,跳转到指定的另一个网站。具体有什么用请参考SEO)

继续阅读PHP常用头信息

Memcache的安装和Memcache PHP扩展加载的注意事项

说实话之前也是一直听说memcache很好很强大,但是一直以来都没有时间去研究,觉得很简单,其实在自己实际操作的过程中遇到了很多问题。下面我把问题总结下

首先安装windows版本的Memcache就是十分方便了,下载Memcache的二进制文件即可,解压到C盘根目录中memcached.exe,然后就打开cmd命令控制台,开始安装Memcache的服务

//安装或卸载
memcahced.exe  -d  install [uninstall]
                                                               
//开启 停止服务
memcached.exe –d start [stop]

好到这里如果没有出现什么错误提示话,Memcache已经安装成 并且已经在进程中运行了。

继续阅读Memcache的安装和Memcache PHP扩展加载的注意事项

Apache&Nginx开启gzip

网页压缩的好处就不用多说了,减少网络延迟,提升网页加载速度什么的……

首先说说apache开启gzip压缩的方法,首先打开“httpd.conf”

//gzip需要这两个模块支持将前面的“#”去掉  大概在91行左右
#LoadModule deflate_module modules/mod_deflate.so
                                           
//大概在102行左右
LoadModule headers_module modules/mod_headers.so

然后在配置文件最后一行加入这些模块配置即可

<IfModule deflate_module>
    SetOutputFilter DEFLATE
    # Don\x92t compress images and other
    SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png|bmp)$ no-gzip dont-vary
    SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
                                    
    SetEnvIfNoCase Request_URI .(?:pdf|doc|xls)$ no-gzip dont-vary
    AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/x-httpd-php application/x-javascript
</IfModule>

注意不要乱换行即可,修改好了之后请重启Apache服务,然后去打开一个网页,我在这里就推荐大家使用chrome浏览器啦~

继续阅读Apache&Nginx开启gzip

Apache配置虚拟主机

Apache服务器一直以来都是单个服务运行,感觉cpu有点浪费然后去百度了下发现可以配置多个虚拟主机来进行各个项目的运行

1、首先将apache里面的httpd.conf文件打开,开启虚拟主机支持

#虚拟主机别名支持 大概在140行左右
LoadModule vhost_alias_module modules/mod_vhost_alias.so

#虚拟主机配置文件  大概在477行左右                        
Include "conf/extra/httpd-vhosts.conf"

将上述两行代码前面的“#”号删掉即可。

2、现在就找到“httpd-vhosts.conf”文件进行如下配置即可

继续阅读Apache配置虚拟主机