2012-04-11 25 views
0

Im Moment habe ich eine Reihe von wenn und elseif die Höhe des div einstellenBrauchen Sie ein wenig Hilfe für Algorithmus

<?php 
if($num == 0){echo 'height:0px;';} 
elseif($num > 0 && $num < 10) {echo 'height:3px;';} 
elseif($num >= 10 && $num < 22) {echo 'height:7px;';} 
elseif($num >= 22 && $num < 45) {echo 'height:16px;';} 
elseif($num >= 45 && $num < 50) {echo 'height:33px;';} 
elseif($num >= 50 && $num < 67) {echo 'height:36px;';} 
elseif($num >= 67 && $num < 79) {echo 'height:48px;';} 
elseif($num >= 79 && $num < 88) {echo 'height:56px;';} 
elseif($num >= 88) {echo 'height:72px;';} 
?> 

Das Problem ist, dass diese für 5 verschiedene divs 5mal copyed ist und denke, es gibt bessere Weg ist, es zu tun

Wie so:

<?php 
     function divHeight($maxNum,$number) 
{ 

    if($number == 0) 
    { 
     echo 'height:0px;' ; 
    } 

    elseif($number >= $maxNum) 
    { 
     echo 'height:72px;' ; 
    } 

    else 
    { 
     //here were the algorithm have to be 
    } 

} 

>

Ich werde es nennen wie <?php divHeight(88,$number);?>

Die maximale Höhe des div 72 ist nun, wie die Höhe berechnen?

// Edit: Das ist so einfach: X: X ist aber zu spät und ich havent sleept so

$newHeight = floor($number * 72/100); 

echo $newHeight; 
+0

Ihre Frage ist nicht klar. Sie möchten optimieren, Ihre Funktion kurz machen? – safarov

+1

warum nicht die if-Bedingungen in Ihrem ersten Code, in eine Funktion? Und ruf es bei Bedarf an, indem du die Zahl als Parameter übergibst! –

+0

divHeight funciton ist der neue Code Ich brauchte nur einen Algorithmus, um die Höhe zu berechnen und die Antwort ist $ newHeight = floor ($ number * 72/100); – Ben

Antwort

2
function mapNumToHeight($num) { 
    // Max $num => height for that num 
    $heightMap = array(
     0 => 0, 
     9 => 3, 
     21 => 7, 
     44 => 16, 
     49 => 33, 
     66 => 36, 
     78 => 48, 
     87 => 56, 
     88 => 72 
    ); 

    // Store the keys into an array that we can search 
    $keys = array_keys($heightMap); 
    rsort($keys); 

    // We want to find the smallest key that is greater than or equal to $num. 
    $best_match = $keys[0]; 
    foreach($keys as $key) { 
     if($key >= $num) { 
      $best_match = $key; 
     } 
    } 

    return 'height:' . $heightMap[$best_match] . 'px;'; 
} 

mapNumToHeight(3); // height:3px; 
mapNumToHeight(33); // height:16px; 
mapNumToHeight(87); // height:56px; 
mapNumToHeight(88); // height:72px; 
mapNumToHeight(1000); // height:72px; 
+0

Lol dies kompliziert .. Ich werde es abstimmen, da ist eine interessante Möglichkeit, das Problem zu lösen. Ich habe mit $ newHeight = floor ($ number * 72/100) gelöst; – Ben

+0

'$ number' = 59 -' floor (59 * 72/100) '== 42. Aber Ihre Anforderungen geben an, dass für '$ number' == 59 das Ergebnis 36 sein sollte. – Interrobang

+0

Ja, aber alle wenn und sonst In der Bewegung war der alte Code. Ich definiere einfach nur einige Höhen, aber der neue Code macht es automatisch. Ich denke, wegen des alten Codes war die Frage ein Missleading. – Ben