Loading...
Hristo_Penchev avatar Hristo_Penchev 389 Точки

[Exam Problems] PHP Basics 29 Аугуст 2014 Evening - Problem {5} - array_multisort

Колеги,

сблъсках се с проблем с функцията array_multisort. Решавам четвърта задача от изпита на 29 август вечерта. Имам асоциативен масив. ТОй съдържа масиви, а всеки от масивите се състои от еднакви асоциативни масиви:


{"CPU":[{"product":"AMD A10-5800K X4 3.8GHz, 4MB Cache","price":"186.00","currency":"BGN"}],

"HDD":[{"product":"500GB Toshiba, SATA 6Gb\/s, 7200rpm, 32MB","price":"88.41","currency":"BGN"},{"product":"SSD 2.5\", 120GB, Corsair F120 LS, SATA3","price":"180.50","currency":"BGN"},{"product":"1TB Toshiba, SATA 6Gb\/s, 7200rpm, 32MB","price":"52.82","currency":"EUR"}],

"RAM":[{"product":"8GB DDR3L 1600 KINGSTON SODIMM","price":"87.00","currency":"USD"},{"product":"16GB Micro SDHC, A-Data, Class10","price":"15.03","currency":"BGN"}],

"motherboard":[{"product":"ASRock B75M-GL R2.0","price":"47.55","currency":"EUR"}]}

Искам да сортирам продуктите във всяка категория според името на продукта. Ето кода:

foreach ($priceList as $key => $category) { //Минаваме по всяка категория
    
    foreach ($category as $key=>$product) {
        $outputArr[$key] = $product['product']; //Правим масив от името на продуктите във //всяка категория
    }
    
    array_multisort($outputArr, SORT_ASC, $category); //Сортираме категорията по име на //продуктите
}

Получавам следната грешка при стартиране: Array sizes are inconsistent. Не мога да разбера къде бъркам. Ето линк към целия ми код:
http://pastebin.com/naqa62rX

 

Тагове:
-1
PHP Web Development Basics 19/12/2014 20:56:14
a.angelov avatar a.angelov 1316 Точки

Здравей,

тази задача и на мен не ми се получи с ползване на array_multisort /която всъщност е доста удобна функция за сортиране/. Мисля, че с нея няма как да бъде изпълнено и изискването: If multiple products have the same name, preserve their original order.

Затова с малко търсене в google намерих и ползвах ето този начин на сортиране, приложих я в твоя код и даде 85/100:

foreach ($priceList as $key => $row) {
usort($row, "cmp");
$priceList[$key] = $row;
}

function cmp($a, $b) {
if ($a['product'] == $b['product']) {
return 0;
}
return ($a['product'] < $b['product']) ? -1 : 1;
}


0
bojanm avatar bojanm 3 Точки
Пробвай това , но вече ми се спи да го тествам:


foreach($category as $k=>$v) {
$tmp['product'][$k] = $v['product'];
}
array_multisort($tmp['product'],SORT_ASC(ili string ),$category);


0
Hristo_Penchev avatar Hristo_Penchev 389 Точки

С usort стана. Опитах решението на bojanm, но не се получи. Не знам защо не работи тук мултисорт. Ако някой може да разбере, нека сподели.

0
Hristo_Penchev avatar Hristo_Penchev 389 Точки

Сортирането с usort го скалъпих, утре може да продължа да мъча мултисорт. Но сега имам проблем със седми тест. Едно на ръка, че според мен това е супер некоректно задаване. Никъде в условието не се споменава, че може да има празни висящи клетки, тоест задачата оценява не толкова знания и умения, колкото иска от нас да отгатнем какво е било в главата на автора. Но хайде, грешки стават, може да е забравил да го допише в условието.
Не мога обаче да измисля решение на задачата. Нито мога да разбера защо авторското решение работи. Единствената смислена разлика с моето решение е, че html_entity_decode се задава не в началото, когато четем текста, а след сплита при отделните елементи. Така вече работи. Все пак ще се радвам на помощ да схвана логиакта в нещата и да открия грешките си.

1
20/12/2014 02:07:47
Filkolev avatar Filkolev 4482 Точки

Аз едва от вчера се мъча с изпитни задачи, но това е основният проблем, който срещам - задачите се решават лесно само ако може да влезеш в главата на автора. Аз си правя някакви алгоритми, които уж отговарят на условието, минават нулевите тестове и след това получавам нещо от рода на 50-70 точки. Без да виждам някаква грешка в логиката си. След което поглеждам авторското решение и виждам, че единствената разлика е не в логиката и алгоритъма, а в конкретния регекс, който ползвам. Което е просто вбесяващо - нулевите тестове би следвало да ти помогнат, а не да те прецакват. Просто не мога да си обясня как уж спазвам всички изисквания на дадена задача и нищо нито в условието, нито в примерите ми помага да установя къде бъркам. 

Иначе за ексейпването - не еднократно се казва, че то се прави в последния възможен момент, т.е. при echo или нещо такова, не при запазването на данните в базата или при четене.

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