php sort слияния массивов

У меня есть список (xml) элементов, каждый элемент имеет категорию и имя:

Категория | название

1         |  Joe
2         |  Carol
3         |  Bruce
1         |  Michael
1         |  Alan
2         |  Brian

Я хочу отсортировать имена по возрастанию в категориях по убыванию следующим образом:

Категория | название

3         |  Bruce
2         |  Brian
2         |  Carol
1         |  Alan
1         |  Joe
1         |  Michael

с целью создания выпадающего списка на веб-странице с каждой категорией в качестве OptGroup и именами, отсортированными в OptGroup.
У меня очень мало опыта работы с PHP, я думаю, что мне нужно сортировать массивы слияний, но после многих часов попыток понять, как это сделать, я не добился большого прогресса.
Любая помощь с благодарностью

0

Решение

$data[] = array('category' => 1, 'name' => 'Joe');
$data[] = array('category' => 2, 'name' => 'Carol');
$data[] = array('category' => 3, 'name' => 'Bruce');
$data[] = array('category' => 1, 'name' => 'Michael');
$data[] = array('category' => 1, 'name' => 'Alan');
$data[] = array('category' => 2, 'name' => 'Brian');<?php
// Obtain a list of columns
$category =array();
$name =array();
foreach ($data as $key => $row) {
$category[$key]  = $row['category'];
$name[$key] = $row['name'];
}

// Sort the data with category descending, name ascending
// Add $data as the last parameter, to sort by the common key
array_multisort($category, SORT_DESC, $name, SORT_ASC, $data);
echo '<pre>'; print_r($category);
?>
1

Другие решения

$name = array("Joe", "Carol", "Bruce", "Michael","Alan","Brian");
sort($name);

Встроенная функция php sort даст желаемый результат

0

Привет, спасибо всем за вашу помощь, включая все другие вопросы Stackoverflow, которые я гуглил, чтобы собрать это воедино, не уверен, как я это сделал, немного в случае бесконечного числа обезьян или это могут быть новички, в любом случае вот что сработало для меня ,
Сортировка имен по возрастанию в пределах вкладов по убыванию

function compare($a, $b) {
if ($a['contribution'] == $b['contribution']) {
return ($a['name'] < $b['name']) ? -1 : 1;
} else {
return ($b['contribution'] - $a['contribution']);
}
}
usort($ads_by_cotribution, 'compare');

Это все волшебство для меня, в этом вся прелесть. Я не включил случай совпадения имен
потому что их не должно быть, и, как я понимаю, равные ценности все равно останутся вместе в другом порядке. Я хотел бы понять, как работают эти функции, они непрерывно проходят через массив, пока не произойдет никаких изменений в порядке — то, что мы раньше называли пузырьковой сортировкой? Означает ли ($ b [‘input’] — $ a [‘input’]), что больше? Финли, есть ли разница между сортировкой вкладов — числовым полем и именами — альфа-полем?

0
По вопросам рекламы [email protected]