Döngünün verimliliği artırın

4 Cevap php

Ben döngü ile yardıma ihtiyacım var. Her div, ben FirstName ve LastName yerine sadece bir set iki takım göstermek istiyorum, ama ben çünkü döngü yapabilirim bilmiyorum. Ayrıca, farklı yazı tipi boyutlarını ayar noktası bir huni gibi şekil görsel bir görünüm yaratmak için olduğunu. how can I add another set of names in each div ve bu kodu daha iyi bir yolu var: Benim sorular? Nasıl benim kod daha verimli hale getirebilir?

Edit: Eh, ben özellikle div içine isimlerden başka bir dizi eklemek veya sadece başka bir döngü kullanabilirsiniz nasıl anlamaya çalışıyorum. Ben içine isimde başka bir dizi eklemek derken ne demek div, ben div veri başka bir satır eklemek istiyorum anlamına gelir; Ben bir MySQL getirilmiş veri ilk iki satır olmasını istiyorum div.

$state = 1;
$fontcount = 25;
while ($row = mysql_fetch_assoc($result)) {

    if( $fontcount == 25 ) {                          $fontsize = "250%";
    } elseif( $fontcount < 25 && $fontcount >= 22 ) { $fontsize = "210%";
    } elseif( $fontcount < 22 && $fontcount >= 19 ) { $fontsize = "170%";
    } elseif( $fontcount < 19 && $fontcount >= 16 ) { $fontsize = "150%";
    } elseif( $fontcount < 16 && $fontcount >= 13 ) { $fontsize = "130%";
    } else {                                          $fontsize = "110%";
    }
    if( $state%2 == 0 ) {
            echo "<div style='background-color: #black; font-size: " . $fontsize . "; text-transform:uppercase; text-align:center;'>";
    } else {
            echo "<div style='background-color: #blue; font-size: " . $fontsize . "; text-transform:uppercase; text-align:center;'>";
    }


    echo $row['FirstName'] . " " . ' <span style="font-size: 15px;">$' . $row['LastName'] . "</span>";
    echo "</div>";
    $state++;
    $fontcount--;
}

4 Cevap

Sorunuzu doğru anlamak ediyorsam, her div iki tam adlarını görüntülemek istiyorum.

Kayıt garip olduğu zaman yapmak için, sadece satır bile ya kümesindeki son kayıt olduğunda onu kapatın, div etiketi açılmalıdır. Bunu başarmak için bir kaç yolu vardır. Ben $ devlet şimdi yapıyoruz gibi çok bir tek / çift sayaç tutmak öneririz. Garip bir rekor div etiketini açın; Bir hatta kayıt üzerine kapatın. (Son kayıt garip eğer div kapatmak için döngü sonra bir çek ekleyin.) Daha sonra rekor garip iken sadece artırmak için $ devlet değişkeni ayarlamak gerekir, divs styling alternatif var ki.

Tster işaret ettiği gibi, burada kod herhangi ciddi bir şekilde gerçekten verimsiz değildir. Muhtemelen bir kaç küçük şeyler sirke-almak olabilir, ancak çoğu uygulamada göreceğiniz tek gerçek verimlilik sorunu iç içe döngüler yatıyor. Burada çıktı yazıyoruz beri, ben senin kod iç içe değildir varsayıyorum, o yüzden ter olmaz.

Ne kod verimli olmadığını düşündürüyor? App herhangi bir hız problemleri neredeyse kesinlikle bu döngü içinde bir if-else merdiveni olan neden olan değil!

Söyleniyor, ben aşağıdaki kullanılmış olurdu:

if ($fontcount < 13)      { $fontsize = "110%"; }
else if ($fontcount < 16) { $fontsize = "130%"; }
else if ($fontcount < 19) { $fontsize = "150%"; }
else if ($fontcount < 22) { $fontsize = "170%"; }
else if ($fontcount < 25) { $fontsize = "210%"; }
else {                      $fontsize = "250%"; }

One other thing: You have two lines which are almost exactly the same. Change them to this:

my $color = ( $state%2 == 0 ) ? "black" : "blue";
echo "<div style='background-color: #" . $color . "; font-size: " . $fontsize . "; text-transform:uppercase; text-align:center;'>";

Ayrıca, (PHP bilmiyorum, ama tahmin ediyorum) Eğer dize kapatmak ve onları her zaman bağlamak zorunda kalmamak dizeleri bu değişkenleri gömebilmeniz:

my $color = ( $state%2 == 0 ) ? "black" : "blue";
echo "<div style='background-color: #$color; font-size: $fontsize; text-transform:uppercase; text-align:center;'>";

İlk olarak, bana soru doğru alalım ...

Sen veritabanından döndürülen sonuçların listesini göstermek istiyorum. Ekran yazı tipi boyutu büyük başlar, küçük bir kısmı her 3 sonuç, her sonuç için alternatif arka plan rengi ...

Benim yaklaşım sunumu ile veri katmanı kırmak ve hardcodes azaltmak için hesaplama biraz kullanmaktır.


$alt = false;
$dataset = array();
$fontcount = 25.0; // Make this float

while ($row = mysql_fetch_assoc($result)) 
{
    $datarow = array();
    $datarow['FirstName'] = $row['FirstName'];
    $datarow['LastName'] = $row['LastName']
    $datarow['FontSize'] = (int) $fontcount; // Remember to store as Integer not float
    $datarow['BackgroundColor'] = ($alt == true) ? 'black' : 'blue'; // Background color alternation
    $dataset[] = $datarow;

    $alt = ($alt == true) ? false : true; // Alternate
    $fontcount -= 0.334; // reduce float point for 1-third, therefore drop a point every 3 iteration
}

foreach($dataset in $item)
{
    $fontsize = $item['FontSize'].'0%'; // Assuming desire size is 10x of 'fontcount' in percentage
    $output = '';
    $output .= '<div style="background-color:'.$item['BackgroundColor'].'; font-size:'.$fontsize;.'text-transform:uppercase; text-align:center;">';
    $output .= $datarow['FirstName'].'<span style="font-size: 15px;">'.$datarow['LastName'].'</span>';
    $output .= '</div>';
    echo $output;
}

Ayrıca yorumuna cevap olarak, sen properbly kod düzenlilik ziyade burada verimli bir döngü arıyoruz.

En fazla 3 seçenek olan zaman, her şeyden önce, bence iç içe IFS kullanılarak kullanılmamalıdır. Bu durumda ben daha ziyade bu yapardı:

switch (true) {
    case ($fontcount == 25) :
        $fontsize = "250%";
    break;
    case ($fontcount < 25 && $fontcount >= 22) :
        $fontsize = "210%";
    break;
    case ($fontcount < 22 && $fontcount >= 19) : 
        $fontsize = "170%";
    break;
    case ($fontcount < 19 && $fontcount >= 16) :
        $fontsize = "150%";
    break;
    case ($fontcount < 16 && $fontcount >= 13) :
        $fontsize = "130%";
    break;
    default:
        $fontsize = "110%";
    break;
}

Saf bir PHP dosyası içinde HTML kullanırken ben genelde kendimi şaşırtmak için değil, değişkenler sopa deneyin. Ayrıca HTML gruplandırma veya bölünmesi gözlerimden kolaylaştırır. Bunun gibi:

$div =  "<div style='background-color: " . 
        ($state%2 == 0 ? '#black' : '#blue') . ";" . 
        " font-size: " . $fontsize . ";" . 
        " text-transform:uppercase; text-align:center;'>";


$name = $row['FirstName'] . " " . 
        ' <span style="font-size: 15px;">$' . 
        $row['LastName'] . "</span>";

$div .= $name;
$div .= "</div>";

echo $div;

Bir bonus kısa kodu istiyorum, ve evet ben bir yaşam için bunu demiyorum eğer

$f=$fontcount;
$c = (($f == 25 ? 25 : ($f < 25 && $f >= 22 ? 21 : ($f < 22 && $f >= 19 ? 17 : ($f < 19 && $f >= 16 ? 15 : ($f < 16 && $f >= 13 ? 13 : 11))))) * 10) . '%';
$fontsize=$c;

İki satır getirmek için

while ($row = mysql_fetch_assoc($result)) {
$row2 = mysql_fetch_assoc($result);

o zaman

if ($row2) {
    $name2 = $row2['FirstName'] . " " . 
            ' <span style="font-size: 15px;">$' . 
            $row2['LastName'] . "</span>";
}