• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Optymalizacja kodu

Object Storage Arubacloud
0 głosów
520 wizyt
pytanie zadane 27 czerwca 2019 w PHP przez michal_php Stary wyjadacz (13,700 p.)

Mam pytanie czy i jak można zoptymalizować kod który ma za dużo if ? i czy dało by rade zastosować tutaj array_map:

 if(isset($_POST['select'])){
                if(($_POST['select'])==1){
                    if(strlen($_POST['list']) <= 50){
                        $font = 11;
                    }
                    if(strlen($_POST['list']) >= 51){
                        $font = 7;
                    }
                    if(strlen($_POST['list']) >= 160 ){
                        $font = 6;
                    }
                }if(($_POST['select'])==2){
                    if (strlen($_POST['list']) <= 160) {
                        $font = 12;
                    }
                    if (strlen($_POST['list']) >= 161) {
                        $font = 10;
                    }
                    if (strlen($_POST['list']) >= 220) {
                        $font = 8;
                    }
                }if(($_POST['select'])==3){
                    if(strlen($_POST['list']) <= 160){
                        $font = 20;
                    }
                    if(strlen($_POST['list']) >= 161){
                        $font = 16;
                    }
                    if(strlen($_POST['list']) >= 220 ){
                        $font = 12;
                    }
                }if(($_POST['select'])==4){
                    if(strlen($_POST['list']) <= 160){
                        $font = 24;
                    }
                    if(strlen($_POST['list']) >= 161){
                        $font = 20;
                    }
                    if(strlen($_POST['list']) >= 220 ){
                        $font = 16;
                    }
                }
            }

 

1
komentarz 27 czerwca 2019 przez ShiroUmizake Nałogowiec (46,300 p.)
Osobiście tak, ale nie znam kontekstu gdzie to ma działać.
komentarz 27 czerwca 2019 przez michal_php Stary wyjadacz (13,700 p.)
To jest zwykły szablon HTML który jest renderowany na PDF? za pomocą bibloteki mpdf z php.
komentarz 27 czerwca 2019 przez michal_php Stary wyjadacz (13,700 p.)
Przeczytałem ten artykuł co mi podesłałeś i za bardzo nie widzę czegoś co mogło by automatycznie skalować Trzcionkę.
komentarz 27 czerwca 2019 przez michal_php Stary wyjadacz (13,700 p.)
Albo może ja tego nie rozumiem
komentarz 27 czerwca 2019 przez wiktoz Mądrala (7,040 p.)

@michal_php, automatyczne skalowanie czcionki na stronie? Takie rzeczy się robi w css. Po co wielkość czcionki jakiegoś usera ma przetwarzać serwer. 

Może spróbuj tego https://www.w3schools.com/cssref/css3_pr_mediaquery.asp.

2 odpowiedzi

0 głosów
odpowiedź 27 czerwca 2019 przez OdsetekGlupoty Pasjonat (15,360 p.)

Jeśli masz serię ifów, użyj elseifów. Ale w tym przypadku najlepiej jeśli zastosowałbyś funkcję switch()​​​​​​.

Jak chcesz w tym kodzie użyć array_map() skoro nie masz ani funkcji, ani tablicy?

komentarz 27 czerwca 2019 przez michal_php Stary wyjadacz (13,700 p.)
A jest jakaś metoda w php która umożliwi nam automatyczne skalowanie ?
komentarz 27 czerwca 2019 przez OdsetekGlupoty Pasjonat (15,360 p.)
To już HTML i CSS
0 głosów
odpowiedź 27 czerwca 2019 przez Chess Szeryf (76,710 p.)
<?php

$list = [[50, 51, 160], [5, 161, 220], [160, 161, 220], [160, 161, 220]];
$font = [[11, 7, 6], [12, 10, 8], [20, 16, 12], [24, 20, 10]];

$external_var = 'Trees';


$font_x = [];

$allow = false;

for($i=0;$i<count($list);$i++) {
  for($j=0;$j<count($list[$i]);$j++) {
    if(strlen($external_var) == $list[$i][$j]) {
      $font_x[] = $font[$i][$j];
      $allow = true;
    }
  }
  if($allow == false) {
    $font_x[] = 'nothing';
  }
  $allow = false;
}


print_r($font_x);

?>

i/lub

<?php

$list = [[50, 51, 160], [5, 161, 220], [160, 161, 220], [160, 161, 220]];
$font = [[11, 7, 6], [12, 10, 8], [20, 16, 12], [24, 20, 10]];

$external_var = 'Trees';

$func = function ($arg1, $arg2) use ($external_var) {
  $font_x = 'nothing';
  for($i=0;$i<count($arg1);$i++) {
    if(strlen($external_var) == $arg1[$i]) {
      $font_x = $arg2[$i];
    }
  }

  return $font_x;
 
};

print_r(array_map($func, $list, $font));

?>
1
komentarz 1 lipca 2019 przez michal_php Stary wyjadacz (13,700 p.)
Mam pytanie bo nie dokona rozumiem wszystko:

$external_var = 'Trees'; - o co tu chodzi

I

$allow = false; - i nie moge zrozumieć false

Z góry dziękuję za objaśnienie
komentarz 1 lipca 2019 przez Chess Szeryf (76,710 p.)

$external_var, to u Ciebie będzie $_POST['list'].

Flaga $allow jest ustawiona początkowo na false. Gdy warunek w if się wykona (strlen...) ustawiona zostaje na true, żeby do tablicy nie trafiła wartość 'nothing', po czym znowu zostaje ustawiona na false, żeby te wartości wpadały do tablicy.

A tak apropo, dziękuję że napomknąłeś o tym, ponieważ zamiast tej flagi można zastosować instrukcję continue i to jest o wiele lepsze rozwiązanie moim zdaniem.

<?php
// ...

$font_x = [];
 
for($i=0;$i<count($list);$i++) {                 // loop 2
  for($j=0;$j<count($list[$i]);$j++) {           // loop 1
    if(strlen($external_var) == $list[$i][$j]) {
      $font_x[] = $font[$i][$j];
      continue 2;
    }
  }
 
  $font_x[] = 'nothing';

}

print_r($font_x);

?>

Rezultat print_r()

Array
(
    [0] => nothing
    [1] => 12
    [2] => nothing
    [3] => nothing
)

Dzięki, że o tym wspomniałeś, ponieważ wcześniej nie za bardzo o tym wiedziałem w PHP jak i w innych językach. Raczej tego nie stosowałem.

Podobne pytania

0 głosów
1 odpowiedź 453 wizyt
pytanie zadane 11 listopada 2018 w PHP przez Śmieszek_;3 Użytkownik (780 p.)
0 głosów
1 odpowiedź 148 wizyt
pytanie zadane 9 grudnia 2017 w PHP przez Dark_Jumpy Początkujący (300 p.)
0 głosów
3 odpowiedzi 457 wizyt
pytanie zadane 11 listopada 2016 w PHP przez Q_Nick Mądrala (5,010 p.)

92,550 zapytań

141,394 odpowiedzi

319,522 komentarzy

61,935 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...