1stPHP

多次元配列のソート

ソース

<?php

//多次元配列をセット
$data = array(
    array(
130,10,0,56,67,99,15,37,46,98),
    array(
"black","gray","blue","red","yellow","white","purple","green","silver","pink"),
    array(
"黒","灰","青","赤","黄色","白","紫","緑","銀","桃"),
    array(
"くろ","はい","あお","あか","きいろ","しろ","むらさき","みどり","ぎん","もも"),
    array(
7,6,6599,345,3,46,648,50,643,57)
);


$sortmord $_GET["sm"];
$sn     $_GET["sn"];

if (!
$sortmord){
  
$sortmord "a";


if (
$sortmord == "a"){
  
$sortmord "d";
  
$sort SORT_ASC;
}else{
  
$sortmord "a";
  
$sort SORT_DESC;
}

  switch (
$sn) {
    case 
0:  array_multisort($data[0],$sort SORT_REGULAR,$data[1],$data[2],$data[3],$data[4]);
    break;
    case 
1:  array_multisort($data[1],$sort SORT_REGULAR,$data[0],$data[2],$data[3],$data[4]);
    break;
    case 
2:  array_multisort($data[2],$sort SORT_REGULAR,$data[0],$data[1],$data[3],$data[4]);
    break;
    case 
3:  array_multisort($data[3],$sort SORT_REGULAR,$data[0],$data[1],$data[2],$data[4]);
    break;
    case 
4:  array_multisort($data[4],$sort SORT_REGULAR,$data[0],$data[1],$data[2],$data[3]);
    break;
  }
  
$th = array("サイズ","color","色","いろ","価格");
print 
"<table border=1>";
print 
"<tr>";
foreach (
$th as $key=>$value) {
  
$s "_";
  if (
$key == $sn) {
    if (
$sm == "a"){$s ="▲";}else{$s ="▼";}
  }
  print 
"<th><a href=\"{$_SERVER['PHP_SELF']}?sn=$key&sm=$sortmord\">$value$s</a></th>\n";
}
print 
"</tr>";


for (
$i=0;$i<count($data[0]);$i++){
  print 
"<tr><td style=\"text-align=right;\">".$data[0][$i]."</td>";
  print 
"<td>".$data[1][$i]."</td><td>".$data[2][$i]."</td><td>".$data[3][$i]."</td>";
  print 
"<td style=\"text-align=right;\">".$data[4][$i]."</td></tr>\n";
}
print 
"</table>";

?>

サンプル実行

多次元配列のソート