2013-02-27 6 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) 

이제 정렬은 다음과 같이해야 같은 옵션이 있습니다. ../sign.After 전에 값을 512k 또는 2M 두 번째 열을 계속 정렬해야하지만 ... 두 번째 열의 값을 포함하는 경우 k char (즉, kylobytes 의미) 첫 번째 있어야합니다 (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

답변

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>"; 
관련 문제