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