PHP快速排序的两种算法

  虽然在PHP这样的web应用开发中,我们不是太强调排序的重要性,因为PHP自身已经带了例如sort()等这样强大的排序函数,但是在一些重要的场合,例如某些高并发的场合,我想排序算法的影响已经不能忽略。所以在此介绍递归排序和迭代排序。

递归法:  

/**
* 递归法实现的快速排序
*/
function quicksort($seq)
{
        $k = $seq[0];
        $x = array();
        $y = array();
        for($i=1; $i< $_size; $i++) {
            if($seq[$i] <= $k) {
                $x[] = $seq[$i];
            } else {
                $y[] = $seq[$i];
            }
        }
        $x = quicksort($x);
        $y = quicksort($y);
        return array_merge($x, array($k), $y);
    } else {
        return $seq;
    }
}

迭代法:

/**
* 迭代法的快速排序
*/
function quicksortx(&$seq)
{
    $stack = array($seq);
    $sort = array();
    while ($stack) {
        $arr = array_pop($stack);
        if(count($arr) <= 1) {
            if(count($arr) == 1) {
                $sort[] = &$arr[0];
            }
            continue;
        }
        $k = $arr[0];
        $x = array();
        $y = array();
        $_size = count($arr);
        for($i =1 ;$i < $_size; $i++) {
            if($arr[$i] <= $k) {
                $x[] = &$arr[$i];
            } else {
                $y[] = &$arr[$i];
            }
        }
        !empty($y) && array_push($stack, $y);
        array_push($stack, array($arr[0]));
        !empty($x) && array_push($stack, $x);
    }
    return $sort;
}

使用:

/**
*产生一个随机数组
*/
for($i=0;$i<5;$i++){
    $testArr[]=mt_rand(0,100);
}
var_dump($testArr);
var_dump(quicksort($testArr));

var_dump(quicksortx($testArr));

php解析xml函数(两种方法)

  XML,可扩展标记语言 (Extensible Markup Language, XML),如今社会,XML已经不再那么的流行,在一些场合以逐渐被结构更好的json取代,但是我们不能忘记它。在此贡献两种PHP解析XML的方法。 

方法一:

function getXmlData($strXml)
{
    $pos = strpos($strXml, 'xml');//确认是否是xml文件
    if ($pos) {
        $xmlCode = simplexml_load_string($strXml);//把xml字符串解释成对象
        $arrayCode = get_object_vars_final($xmlCode);//返回由对象属性组成的关联数组
        return $arrayCode;
    }else{
        return '';
    }
}

function get_object_vars_final($obj)
{
    if (is_object($obj)) {
        $obj = get_object_vars($obj);
    }
    if (is_array($obj)) {
        foreach ($obj as $key => $value) {
            $obj[$key] = get_object_vars_final($value);
        }
    }
    return $obj;
}

方法二:

var_dump(json_decode(json_encode(simplexml_load_string($string)),true));

用法:

$string = <<<XML
     Forty What?JoeJaneI know that's the answer -- but what's     the question?XML;

var_dump(getXmlData($string));
var_dump(json_decode(json_encode(simplexml_load_string($string)),true));

方法二利用了json函数,是比较hack的做法,实际开发中可以采用。