0

私のドロップダウンにはこのようなオプションがあります

something 4M/512k
something 10M/768k
something 4M/2M
something 10M/5M
something 10M/10M
something 20M/20M (FTTH)
something 60M/60M (FTTH)
something 100M/100M (FTTH)

並べ替えは次のようになります。何かの単語を見ないでください。並べ替えの最初の列は 4M または 10M にする必要があります... / 記号の前の値。その後、並べ替えは 512k の 2 番目の列で続行する必要があります。または2M ...しかし、2番目の列の値にk文字(キロバイトを意味する)が含まれているかどうかによって異なります(Mはメガバイトを意味します)。3 番目の列は FTTH である必要があります。たとえば、その行に (FTTH) 単語が含まれている場合、最後に配置する必要があります ...

これは、どのように見えるべきかの例です

something 4M/512k
something 4M/2M
something 10M/768k
something 10M/5M
something 10M/10M
something 20M/20M (FTTH)
something 60M/60M (FTTH)
something 100M/100M (FTTH)
4

1 に答える 1

0

http://www.php.net/usortを使用して独自の並べ替えメソッドを作成し、ドロップダウン オプションを含む配列を並べ替えることができます。

これで良いスタートが切れるはずです:

<?php
$data[] = "something 4M/512k";
$data[] = "something 10M/768k";
$data[] = "something 4M/2M";
$data[] = "something 10M/5M";
$data[] = "something 10M/10M";
$data[] = "something 20M/20M (FTTH)";
$data[] = "something 60M/60M (FTTH)";
$data[] = "something 100M/100M (FTTH)";

function mysort($a, $b){
  list($something, $a_speed) = explode(" ", $a);
  list($something, $b_speed) = explode(" ", $b);

  list($a_speed_part_1, $a_speed_part_2) = explode("/", $a_speed);
  list($b_speed_part_1, $b_speed_part_2) = explode("/", $b_speed);

  //TODO: add M/k comparison or calculation

  if(intval($a_speed_part_1) > intval($b_speed_part_1)){
    return 1;
  } elseif (intval($a_speed_part_1) < intval($b_speed_part_1)) {
    return -1;
  } else {
    if(intval($a_speed_part_2) > intval($b_speed_part_2)){
      return 1;
    } elseif (intval($a_speed_part_2) < intval($b_speed_part_2)) {
      return -1;
    } else {
      return 0;
    }
    return 0;
  }
}

usort($data, "mysort");
echo "<pre>";
print_r($data);
echo "</pre>";
于 2013-02-27T11:42:57.363 に答える