[Homework] PHP Basics - Flow-Control - November 2014
Виждам, че няма такава тема още, така че я пускам. Ето моето домашно. Критики и съвети добре дошли!
Виждам, че няма такава тема още, така че я пускам. Ето моето домашно. Критики и съвети добре дошли!
Здравейте,
Опитвам се да реша задачата Sorting Students от това домашно.
Подходът ми е следния:
Приемам данните от формата и правя array от обекти, всеки от които съдържа информация за всеки един студент. Property-тата на обектите са съответно firstName, lastName, email, score. След това се опитвам да сортирам array-а по дадено property използвайки usort, и проблемът идва от това, че се опитвам да сортирам елементите по property с променлива стойност.
Тоест според това дали изборът на потребителя е бил Sort By: First Name, Last Name... etc, искам директно да използвам това, що е зададено като string, който да определи по кое от property-тата да сортира array-a. Наясно съм, че това най-лесно може да стане като просто access-нем property-то чрез следния синтаксис - $obj->$propertyName, където $propertyName съдържа стринг със стойността на желанотo property.
Обаче, не успявам да използвам желаната променлива във вградената функция на usort. В тази насока, как мога да реализирам по някакъв начин замисъла си без да се налага да използвам дърводелски методи от сорта на:
if ($propertyName == 'firstName') {
// sort by firstName
} else if ...
Ето и кодът на скрипта, който обработва данните от формата (неуспешно засега):
Специално за mihayloff14 - начин да проверим дали даден низ е палиндром, ползвайки регулярен израз - от последната задължителна задача в домашното. В StackOverflow казали, че било невъзможно. Challenge acepted and completed.
Не е особено красиво и бих си ползвал стандартния начин - цепене до масив и обръщане, но все пак работи. Идеята - с цикъл се пълнят групи за прихващане до половината на дължината на низа, след това се пълнят същите групи с техните номера, но в обратен ред. По средата може да има или да няма символ.
Може да се наложат повече ограничения за символите, аз ползвам точка, демек всичко приемам.
Абе грозна гледка, но все пак възможно да се постигне.
Не съм се и съмнявал, че ще се справиш.
Поздравления за хитрото решение. ^^
Абе хитро не знам дали е, по-скоро си е направо глупаво. То по тая логика може да циклим по низа и да взимаме по две букви и да проверяваме дали са еднакви. Идеята беше да видя дали става с регекс. Еми криво-ляво става.
Е, важното е че изпълни предизвикателството, а това че има по-добро решение е очевидно :D
Ето и моите задачи, които най-накрая успях да завърша (включително и последната задача Student Sorting):
GitHub
Ето ги и моите решения. Надявам се на градивна критика защото имам много да наваксвам с PHPто.
Escape-вай променливите при самото им принтиране в html, а не при инициализирането им.
За последната задача има някои функции в php, които могат да се използват:
strrev($string) , str_shuffle($string)
От там произлизаше проблема, благодаря.
Homework-PHP_FlowControl - преборих се в последния момент,преди да изтече срока за изпращане на домашното.
Според мен най-малко за score ще ти се наложи да пишеш overload, т.е. if, за другите сравняването на стрингове би трябвало да работи. Какво точно не се получава до момента? Не съм я правил тази задача засега, та не съм се сблъсквал с проблемите при сортиране в дълбочина. Ако е както в джаваскрипт би трябвало да сработи по начина, по който си тръгнал.
Проблемът е, че във анонимната функция в usort, се опитвам да подам като параметът $property, но то не го приема по някаква причина и следователно там където съм написал $a->$property гърми с грешка тип 'undefined variable'.
Ако бъобще не го подам като параметър, резултатът е същият.
Пробвай да я вземеш като глобална променлива, не я подавай като параметър, а вътре в сортиращата функция а вземи с globals или както там беше.