Loading...
mihayloff14 avatar mihayloff14 824 Точки

Здравейте,

Опитвам се да реша задачата 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 ...

 

Ето и кодът на скрипта, който обработва данните от формата (неуспешно засега):

http://pastebin.com/Ab60TNEC

0
Filkolev avatar Filkolev 4482 Точки

Според мен най-малко за score ще ти се наложи да пишеш overload, т.е. if, за другите сравняването на стрингове би трябвало да работи. Какво точно не се получава до момента? Не съм я правил тази задача засега, та не съм се сблъсквал с проблемите при сортиране в дълбочина. Ако е както в джаваскрипт би трябвало да сработи по начина, по който си тръгнал.

0
mihayloff14 avatar mihayloff14 824 Точки

Проблемът е, че във анонимната функция в usort, се опитвам да подам като параметът $property, но то не го приема по някаква причина и следователно там където съм написал $a->$property гърми с грешка тип 'undefined variable'.

Ако бъобще не го подам като параметър, резултатът е същият.

0
08/12/2014 20:04:14
Filkolev avatar Filkolev 4482 Точки

Пробвай да я вземеш като глобална променлива, не я подавай като параметър, а вътре в сортиращата функция а вземи с globals или както там беше.

0
Filkolev avatar Filkolev 4482 Точки

Специално за mihayloff14  - начин да проверим дали даден низ е палиндром, ползвайки регулярен израз - от последната задължителна задача в домашното. В StackOverflow казали, че било невъзможно. Challenge acepted and completed.

Не е особено красиво и бих си ползвал стандартния начин - цепене до масив и обръщане, но все пак работи. Идеята - с цикъл се пълнят групи за прихващане до половината на дължината на низа, след това се пълнят същите групи с техните номера, но в обратен ред. По средата може да има или да няма символ. 

Може да се наложат повече ограничения за символите, аз ползвам точка, демек всичко приемам. 

Абе грозна гледка, но все пак възможно да се постигне.

КОДЪТ

 

1
mihayloff14 avatar mihayloff14 824 Точки

Не съм се и съмнявал, че ще се справиш.

Поздравления за хитрото решение. ^^

1
Filkolev avatar Filkolev 4482 Точки

Абе хитро не знам дали е, по-скоро си е направо глупаво. То по тая логика може да циклим по низа и да взимаме по две букви и да проверяваме дали са еднакви. Идеята беше да видя дали става с регекс. Еми криво-ляво става.

0
mihayloff14 avatar mihayloff14 824 Точки

Е, важното е че изпълни предизвикателството, а това че има по-добро решение е очевидно :D

0
mihayloff14 avatar mihayloff14 824 Точки

Ето и моите задачи, които най-накрая успях да завърша (включително и последната задача Student Sorting):

GitHub

0
lmarkov avatar lmarkov 7 Точки

GitHub

Ето ги и моите решения. Надявам се на градивна критика защото имам много да наваксвам с PHPто.

1
10/12/2014 15:00:42
nikola.m.nikolov avatar nikola.m.nikolov 830 Точки

Escape-вай променливите при самото им принтиране в html, а не при инициализирането им.

За последната задача има някои функции в php, които могат да се използват:

strrev($string)str_shuffle($string)

 

1
10/12/2014 15:20:41
Petar_Belberov avatar Petar_Belberov 41 Точки

От там произлизаше проблема, благодаря.

0
magdalena70 avatar magdalena70 96 Точки

Homework-PHP_FlowControl - преборих се в последния момент,преди да изтече срока за изпращане на домашното.

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.