2013-02-27 158 views
0

我的下拉有这样PHP,从下拉列表排序选项

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。 ../sign之前的值。之后,排序应该继续第二列,即512k或2M ......但它取决于第二列中的值是否包含k char(表示千字节)应该是第一(M意味着兆字节)。 如果该行包含(FTTH)字应该放在最后,第三列应该是FTTH.For例如...

这就是例子应该如何看起来像

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) 
+0

然后是如何产生的选项?不能你只是手动把它们放在正确的顺序?你有一系列的价值观吗?告诉我们! – jtheman 2013-02-27 11:43:26

回答

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>";