//對多個數組排序 $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; } |