Професионална програма
Loading...
Hristo_Penchev avatar Hristo_Penchev 388 Точки

[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 1317 Точки

Здравей,

тази задача и на мен не ми се получи с ползване на 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 388 Точки

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

0