php多維陣列排序方法

來源:互聯網
上載者:User
 代碼如下 複製代碼

//對多個數組排序

$ar1 = array("10", 100, 100, "a");
$ar2 = array(1, 3, "2", 1);
array_multisort($ar1, $ar2);

var_dump($ar1);
var_dump($ar2);

//本例中經過排序後,第一個數組將包含 "10","a",100,100。第二個數組將包含 1,1,"2",3。第二個數組中的項目順序完全和第一個數組中相應的項目(100 和 100)順序一致。

$ar = array(
       array("10", 11, 100, 100, "a"),
       array( 1, 2, "2", 3, 1)
     );
array_multisort($ar[0], sort_asc, sort_string,
               $ar[1], sort_numeric, sort_desc);
var_dump($ar);

/*
排序次序標誌:
◆sort_asc - 按照上升順序排序
◆sort_desc - 按照下降順序排序

排序類型標誌:
◆sort_regular - 將項目按照通常方法比較
◆sort_numeric - 將項目按照數值比較
◆sort_string - 將項目按照字串比較

每個數組之後不能指定兩個同類的排序標誌。每個數組後指定的排序標誌僅對該數組有效 - 在此之前為預設值 sort_asc 和 sort_regular

*/

 function cmp($a, $b)
{
    return strcmp($a["fruit"], $b["fruit"]);
}

$fruits[0]["fruit"] = "lemons";
$fruits[1]["fruit"] = "apples";
$fruits[2]["fruit"] = "grapes";

usort($fruits, "cmp");

while (list($key, $value) = each($fruits)) {
    echo "$fruits[$key]: " . $value["fruit"] . " ";
}

//看一個完善的

$data=array(
 array(
  'name'=>'alice',
  'key'=>'2fc4ab3d639e5400efdfc73bc27e83f1',
  'age'=>20
 ),
 array(
  'name'=>'claudia',
  'key'=>'831c2b79c1f19af39c7e3321e11e5f5e',
  'age'=>18
 ),
 array(
  'name'=>'beatrice',
  'key'=>'6f8512a2066b8f35a27a495ce1228c76',
  'age'=>100
 ),
 array(
  'name'=>'denise',
  'age'=>25,
  'key'=>'ef6de3b178bf9f69a9fef72e4ee7bbe9'
 )
);

$arr1 = sortdata($data, "name","asc");
echo "<pre>";
var_dump($arr1);
echo "</pre>";

$arr2 = sortdata($data, "age","desc");
echo "<pre>";
var_dump($arr2);
echo "</pre>";


function sortdata($data, $col, $order){
 if (count($data)) $temp_array[key($data)] = array_shift($data);

 foreach($data as $key => $val){
  $offset = 0;
  $found = false;
  foreach($temp_array as $tmp_key => $tmp_val){
   if(!$found and strtolower($val[$col]) > strtolower($tmp_val[$col])){
    $temp_array = array_merge((array)array_slice($temp_array,0,$offset),
     array($key => $val),
     array_slice($temp_array,$offset)
    );
    $found = true;
   }
   $offset++;
  }
  if(!$found) {
   $temp_array = array_merge($temp_array, array($key => $val));
   }
 }
 if (strtolower($order)=="asc"){
  $array = array_reverse($temp_array);
 } else {
  $array = $temp_array;
 }
 return $array;
}

?>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.