加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php专用数组排序类ArraySortUtil用法实例

发布时间:2020-12-13 02:32:58 所属栏目:PHP教程 来源:网络整理
导读:《:php专用数组排序类ArraySortUtil用法实例》要点: 本文介绍了:php专用数组排序类ArraySortUtil用法实例,希望对您有用。如果有疑问,可以联系我们。 本篇章节讲解php专用数组排序类ArraySortUtil用法.供大家参考研究.具体如下: PHP应用 ** * A

《:php专用数组排序类ArraySortUtil用法实例》要点:
本文介绍了:php专用数组排序类ArraySortUtil用法实例,希望对您有用。如果有疑问,可以联系我们。

本篇章节讲解php专用数组排序类ArraySortUtil用法.分享给大家供大家参考.具体如下:PHP应用

**
 * ArraySortUtil is a array sort utility,you can extends the sorting engine.
 *
 * @version 0.1
 * @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,"particular"=>"Vostro 1420","purchase_price"=>2500,"other_charges"=>0);
$assetData[] = array("id" => 3,"subcategory"=>"Laptop","particular"=>"Vostro 1520","purchase_price"=>4500,"other_charges"=>100);
$assetData[] = array("id" => 4,"supplier" => "Acer","particular"=>"Apire One","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,"particular"=>"Staff Table","purchase_price"=>500,"other_charges"=>0);
$assetData[] = array("id" => 7,"subcategory"=>"Chair","particular"=>"Staff Chair","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 "</pre>";
$sorted = ArraySortUtil::uasort($assetData,"order" => true) // desc
 ));
echo "<h1>uasort:result</h1>";
echo "<pre>";
 print_r($sorted);
echo "</pre>";

希望本文所述对大家的php程序设计有所赞助.

编程之家培训学院每天发布《:php专用数组排序类ArraySortUtil用法实例》等实战技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培养人才。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读