存档

文章标签 ‘PHP分类’

php数组排序

2010年5月5日

近日,看到一关于PHP数组排序的问题,居然在瞬间没有想出如何实现!真的是有点丢分呢。。。

于是想起CSDN上曾有一篇文章说过只有20%的人能够实现二分查找,看来我在那20%之外了

于是想了一下,得出以下实现算法,供大家借鉴。

<?php
class sortNum{
        private $_sortArr;
        private $_tmp = array();
        function __construct($arr=array()){
                if(count($arr)!=0)
                        $this->_sortArr = $arr;
        }
        function __desctruct(){
            unset($this->_sortArr);
            unset($this->_item);
        }
        public function setNum($arr){
                if(count($arr)!=0){
                        $this->_sortArr = $arr;
                        return true;
                }else
                        return false;
        }
        public function sortArray(){
            $num=count($this->_sortArr);
            $min=-999999999;
            for($i=0;$i<=$num;$i++){
                $mina=999999999;
                foreach ($this->_sortArr as $key => $value) {
                    if($value>$min&&$value<$mina){
                        $this->_tmp[$i]=$value;
                        $mina=$value;
                    }
                }
                $min=$mina;
            }
            return $this->_tmp;
        }
}

$st = array(2,6,1,5,3,7);
$obj=new sortNum($st);
$rs = $obj->sortArray();
print_r($rs);

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 5
    [4] => 6
    [5] => 7
)

 

这里,看来以后得多加注意这种基本的算法问题了,不然再次出现这种情况,可真是冤啊。。。

PHP教程 , ,

PHP无限级分类算法

2009年3月26日

今天无意中发现这个PHP无限级分类算法,有点忙,先放上来。

< ?php
/*
数据表结构如下:
CREATE TABLE `category` (
  `categoryID` smallint(5) unsigned NOT NULL auto_increment,
  `categoryParentID` smallint(5) unsigned NOT NULL default '0',
  `categoryName` varchar(50) NOT NULL default '',
  PRIMARY KEY  (`categoryID`)
) ENGINE=MyISAM  DEFAULT CHARSET=gbk;

INSERT INTO `category` ( `categoryParentID`, `categoryName`) VALUES
(0, '一级类别'),
(1, '二级类别'),
(1, '二级类别'),
(1, '二级类别'),
(2, '三级类别'),
(2, '333332'),
(2, '234234'),
(3, 'aqqqqqd'),
(4, '哈哈'),
(5, '66333666');

*/

//指定分类id变量$category_id,然后返回该分类的所有子类
//$default_category为默认的选中的分类
function Get_Category($category_id = 0,$level = 0, $default_category = 0)
{
        global $DB;
        $sql = "SELECT * FROM category ORDER BY categoryID DESC";
        $result = $DB->query( $sql );
        while ($rows = $DB->fetch_array($result))
        {
                $category_array[$rows[categoryParentID]][$rows[categoryID]] = array('id' => $rows[categoryID], 'parent' => $rows[categoryParentID], 'name' => $rows[categoryName]);
        }
        if (!isset($category_array[$category_id]))
        {
                return "";
        }
        foreach($category_array[$category_id] AS $key => $category)
        {
                if ($category['id'] == $default_category)
                {
                        echo "\n";
                }
                else
                {
                        echo ">" . $category['name'] . "\n";
                }
                Get_Category($key, $level + 1, $default_category);
        }
        unset($category_array[$category_id]);
}

/*
函数返回的数组格式如下所示:
Array
(
        [1] => Array ( [id] => 1 [name] => 一级类别 [level] => 0 [ParentID] => 0 )
        [4] => Array ( [id] => 4 [name] => 二级类别 [level] => 1 [ParentID] => 1 )
        [9] => Array ( [id] => 9 [name] => 哈哈 [level] => 2 [ParentID] => 4 )
        [3] => Array ( [id] => 3 [name] => 二级类别 [level] => 1 [ParentID] => 1 )
        [8] => Array ( [id] => 8 [name] => aqqqqqd [level] => 2 [ParentID] => 3 )
        [2] => Array ( [id] => 2 [name] => 二级类别 [level] => 1 [ParentID] => 1 )
        [7] => Array ( [id] => 7 [name] => 234234 [level] => 2 [ParentID] => 2 )
        [6] => Array ( [id] => 6 [name] => 333332 [level] => 2 [ParentID] => 2 )
        [5] => Array ( [id] => 5 [name] => 三级类别 [level] => 2 [ParentID] => 2 )
        [10] => Array ( [id] => 10 [name] => 66333666 [level] => 3 [ParentID] => 5 )
)
*/
//指定分类id,然后返回数组
function Category_array($category_id = 0,$level=0)
{
        global $DB;
        $sql = "SELECT * FROM category ORDER BY categoryID DESC";
        $result = $DB->query($sql);
        while ($rows = $DB->fetch_array($result))
        {
                $category_array[$rows['categoryParentID']][$rows['categoryID']] = $rows;
        }

        foreach ($category_array AS $key=>$val)
        {
                if ($key == $category_id)
                {
                        foreach ($val AS $k=> $v)
                        {
                                $options[$k] =
                                array(
                                        'id' => $v['categoryID'], 'name' => $v['categoryName'], 'level' => $level,        'ParentID'=>$v['categoryParentID']
                                );

                                $children = Category_array($k, $level+1);

                                if (count($children) > 0)
                                {
                                        $options = $options + $children;
                                }
                        }
                }
        }
        unset($category_array[$category_id]);
        return $options;
}

?>

PHP教程 , , , ,