2013-02-27 85 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>";