У меня есть список (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, я думаю, что мне нужно сортировать массивы слияний, но после многих часов попыток понять, как это сделать, я не добился большого прогресса.
Любая помощь с благодарностью
$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);
?>
$name = array("Joe", "Carol", "Bruce", "Michael","Alan","Brian");
sort($name);
Встроенная функция php sort даст желаемый результат
Привет, спасибо всем за вашу помощь, включая все другие вопросы 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’]), что больше? Финли, есть ли разница между сортировкой вкладов — числовым полем и именами — альфа-полем?