• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

php专用数组排序的类 ArraySortUtil

PHP 水墨上仙 2530次浏览

php专用数组排序的类 ArraySortUtil

** 
 * ArraySortUtil is a array sort utility, you can extends the sorting engine. 
 * 
 * @version 0.1 
 * @author coderkk Cudnik <coderkk@gmail.com> 
 * @license http://www.opensource.org/licenses/mit-license.php MIT License 
 * @package utility.sort 
 */ 
  
class ArraySortUtil 
{ 
    static function uasort($unsort, $fields) 
    { 
        if ( !is_array($unsort) || sizeof($unsort) <= 0 ) return $unsort; 
        $sorted = uasortEngine::uasort($unsort, $fields); 
        return $sorted; 
    } 
    static function multisort($unsort, $fields) 
    { 
        if ( !is_array($unsort) || sizeof($unsort) <= 0 ) return $unsort; 
        $sorted = multisortEngine::multisort($unsort, $fields); 
        return $sorted; 
    } 
} 
class multisortEngine 
{ 
    static function multisort($unsort, $fields) 
    { 
        $sorted = $unsort; 
        if (is_array($unsort)) 
        { 
            $loadFields = array(); 
            foreach($fields as $sortfield) 
            { 
                $loadFields["field"][] = array( 
                                "name" => $sortfield["field"], 
                                "order" => $sortfield["order"], 
                                "nature" => $sortfield["nature"], 
                                "caseSensitve" => $sortfield["caseSensitve"] 
                ); 
                $loadFields["data"][$field["field"]] = array(); 
            } 
            // Obtain a list of columns 
            foreach ($sorted as $key => $row) { 
                foreach($loadFields["field"] as $field) { 
                    $value = $row[$field["name"]]; 
                    $loadFields["data"][$field["name"]][$key] = $value; 
                } 
            } 
            $parameters = array(); 
            foreach($loadFields["field"] as $sortfield) { 
                $array_data = $loadFields["data"][$sortfield["name"]]; 
                $caseSensitve = ( $sortfield["caseSensitve"] == null ) ? $sortfield["caseSensitve"] : false; 
                if (!$caseSensitve) $array_data = array_map('strtolower', $array_data); 
                $parameters[] = $array_data; 
                if ( $sortfield["order"] != null ) $parameters[] = ( $sortfield["order"] ) ? SORT_DESC : SORT_ASC; 
                if ( $sortfield["nature"] != null ) $parameters[] = ( $sortfield["nature"] ) ? SORT_REGULAR : SORT_STRING; 
            } 
            $parameters[] = &$sorted; 
            call_user_func_array("array_multisort", $parameters); 
        } 
        return $sorted; 
    } 
} 
class uasortEngine 
{ 
    static private $caseSensitve = false; 
    static private $sortfields = array(); 
    static private $sortorder = true; 
    static private $nature = false; 
    static private function uasort_callback(&$a, &$b) 
    { 
        foreach(self::$sortfields as $sortfield) 
        { 
            $_field = $sortfield["field"]; 
            $_order = isset($sortfield["order"]) ? $sortfield["order"] : self::$sortorder; 
            $_caseSensitve = isset($sortfield["caseSensitve"]) ? $sortfield["caseSensitve"] : self::$caseSensitve; 
            $_nature = isset($sortfield["nature"]) ? $sortfield["nature"] : self::$nature; 
            if ($_field != "") 
            { 
                $retval  = 0; 
                if ($_nature) 
                { 
                    if ($_caseSensitve) 
                    { 
                        $compare = strnatcmp($a[$_field], $b[$_field]); 
                    } 
                    else 
                    { 
                        $compare = strnatcasecmp($a[$_field], $b[$_field]); 
                    } 
                } 
                else 
                { 
                    if ($_caseSensitve) 
                    { 
                        $compare = strcmp($a[$_field], $b[$_field]); 
                    } 
                    else 
                    { 
                        $compare = strcasecmp($a[$_field], $b[$_field]); 
                    } 
                } 
                if ($compare !== 0 && !$_order) $compare = ($compare > 0) ? -1 : 1; 
            } 
            if ($compare !== 0) break; 
        } 
        return $compare; 
    } 
    static function uasort($unsort, $fields) 
    { 
        self::$sortfields = $fields; 
        $sorted = $unsort; 
        uasort($sorted, array('uasortEngine', 'uasort_callback')); 
        return $sorted; 
    } 
}

使用范例

<?php 
require_once('class.ArraySortUtil.php'); 
// declare test data 
$assetData[] = array("id" => 1, "category"=>"Hardware", "subcategory"=>"Personal Computer", "supplier" => "DELL", "particular"=>"Vostro 1320", "purchase_price"=>2300, "other_charges"=>500);
$assetData[] = array("id" => 2, "category"=>"Hardware", "subcategory"=>"Personal Computer", "supplier" => "DELL", "particular"=>"Vostro 1420", "purchase_price"=>2500, "other_charges"=>0); 
$assetData[] = array("id" => 3, "category"=>"Hardware", "subcategory"=>"Laptop", "supplier" => "DELL", "particular"=>"Vostro 1520", "purchase_price"=>4500, "other_charges"=>100); 
$assetData[] = array("id" => 4, "category"=>"Hardware", "subcategory"=>"Laptop", "supplier" => "Acer", "particular"=>"Apire One", "purchase_price"=>2500, "other_charges"=>200); 
$assetData[] = array("id" => 5, "category"=>"Furniture", "subcategory"=>"Table", "supplier" => "CHEN", "particular"=>"Manager Table", "purchase_price"=>1000, "other_charges"=>0); 
$assetData[] = array("id" => 6, "category"=>"Furniture", "subcategory"=>"Table", "supplier" => "CHEN", "particular"=>"Staff Table", "purchase_price"=>500, "other_charges"=>0); 
$assetData[] = array("id" => 7, "category"=>"Furniture", "subcategory"=>"Chair", "supplier" => "CHEN", "particular"=>"Staff Chair", "purchase_price"=>500, "other_charges"=>0); 
$sorted = ArraySortUtil::multisort($assetData, array( 
        array("field"=>"category"), 
        array("field"=>"subcategory", "order" => true)  // desc 
    )); 
echo "<h1>multisort:result</h1>"; 
echo "<pre>"; 
  print_r($sorted); 
echo "

“;
$sorted = ArraySortUtil::uasort($assetData, array(
array(“field”=>”category”),
array(“field”=>”subcategory”, “order” => true) // desc
));
echo “

uasort:result

“;
echo “

"; 
  print_r($sorted); 
echo "

“;


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明php专用数组排序的类 ArraySortUtil
喜欢 (0)
加载中……