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

Ocena prostego skryptu PHP

VPS Starter Arubacloud
0 głosów
202 wizyt
pytanie zadane 3 lipca 2018 w PHP przez chmod96 Obywatel (1,380 p.)

Cześć, napisałem skrypt, który w założeniu jest dość prosty. Mianowicie sprawdza czy dane słowo z tablicy da się utworzyć z podanych liter w drugiej tablicy. Wszystko działa okej, jednak ciekawi mnie wasza ocena i ewentualne inne lub inne lepsze pomysły na rozwiązanie tej zagwozdki.

Mój kod:

<?php

function test($words, $letters)
{
    // Variable that stores the results
    $results = array();

    // Get word by word from array
    foreach($words as $word)
    {
        
        // A temporary variable holding letters
        $temp = null;
        
        for($i = 0; $i < strlen($word); $i++)
        {
            // Get letter by letter from array
            foreach($letters as $letter)
            {
                // Checking if the letter from the word is like in the array
                if($letter == $word[$i])
                {
                    $temp = $temp . $word[$i];
                }
            }
        }

        if($word == $temp)
        {
            array_push($results, $temp);
        }
    }
    
    // Return the matching words in the array
    return $results;
}

// Data
$words = array("banan", "zebra", "kotwica", "pierogi", "warszawa");
$letters = array('b', 'w', 'e', 'r', 'd', 'm', 'z', 'a', 's', 'c', 'n');

// Run...
print_r(test($words, $letters));


?>

z góry dzięki za pomoc i ocenę.

komentarz 3 lipca 2018 przez Tomek Sochacki Ekspert (227,490 p.)
a czy skrypt uwzględnia możliwość wykonania słowa "banan" z liter "b,A,n" czyli czy wielkość liter musi mieć znaczenie? Może warto nie uwzględniać wielkości liter i literę "A" traktować jako poprawną do wykonania słowa "banan"?
komentarz 3 lipca 2018 przez chmod96 Obywatel (1,380 p.)
No tak masz rację, można to wprowadzić. Jednak teraz chodzi mi o ocenę algorytmu sprawdzającego, a inne przypadki  później będę kodził
komentarz 3 lipca 2018 przez chmod96 Obywatel (1,380 p.)

@Tomek Sochacki,

                // Checking if the letter from the word is like in the array
                if(strtolower($letter) === strtolower($word[$i]))
                {
                    $temp = $temp . $word[$i];
                }

To w sumie rozwiązuje problem :D

1
komentarz 3 lipca 2018 przez Tomek Sochacki Ekspert (227,490 p.)
nom... tylko tak się zastanawiam czy nie lepsze byłoby na samym początku zamienienie wszystkich liter na małe, osobiście staram się w instrukcjach warunkowych robić możliwie jak najprostsze porównania bez dodatkowych funkcji, ale też nie jest to jakaś sztywna reguła, to tylko taka sugestia, można by pobadać wydajność obu rozwiązań.
komentarz 3 lipca 2018 przez chmod96 Obywatel (1,380 p.)
była by to jakaś myśl, jednak jak szukałem na szybko takiego rozwiązania na stackoverflow i nie ma nic szybkiego na przekonwertowanie całego array na raz. na razie to rozwiązaneie się sprawdza więc nie ruszam :)
1
komentarz 3 lipca 2018 przez Tomek Sochacki Ekspert (227,490 p.)

nie ma nic szybkiego na przekonwertowanie całego array na raz

ja bym to zrobił array_map.

1 odpowiedź

+2 głosów
odpowiedź 3 lipca 2018 przez Mariusz08 Maniak (62,280 p.)
$results = array();

Możesz użyć skróconego zapisu tablicy []

function test($words, $letters)

Możesz określić typ argumentu oraz typ zwracanej wartości

if($word == $temp)

Można użyć ===

$words = array("banan", "zebra", "kotwica", "pierogi", "warszawa");

+ za pierogi wink

Poza tym można zrobić oddzielną klasę na tego typu sprawdzanie oraz przestrzeganie standardu PSR-2.

 

komentarz 3 lipca 2018 przez chmod96 Obywatel (1,380 p.)
Dzięki za odpowiedź, celne uwagi już je wprowadziłem jednak może rozwiniesz ostatni punkt.
komentarz 3 lipca 2018 przez Mariusz08 Maniak (62,280 p.)
Całą funkcję test zamieniłbym na jakąś klasę walidującą (OOP i te sprawy). A co do drugiego - przestrzeganie standardu PSR-2 który już w zasadzie jest standardem w większości firm. https://www.php-fig.org/psr/psr-2/

Podobne pytania

0 głosów
0 odpowiedzi 531 wizyt
pytanie zadane 18 września 2021 w C# przez johnreese234 Nowicjusz (120 p.)
0 głosów
1 odpowiedź 166 wizyt
pytanie zadane 26 lipca 2019 w C# przez KriX89 Nowicjusz (200 p.)
0 głosów
1 odpowiedź 322 wizyt
pytanie zadane 18 lutego 2019 w C i C++ przez Hiskiel Pasjonat (22,830 p.)

92,950 zapytań

141,910 odpowiedzi

321,133 komentarzy

62,283 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.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...