Появилась необходимость сортировки: PHP: Array ( [Ukraine] => Array( [Lvov] => 1 [Odessa] => 3 ) [Russia] => Array ( [Moskow] => 5 [St. Petersburg] => 3 ) [France] => ( Array ( [Paris] => 2 [Nice] => 1 ) ) Надо вывести страны с большем количеством городов, вверху. PHP: Russia 8 Ukraine 4 France 3 ! при этом не должны теряться города и кол-во в них элементов По комаднам сортировки в php не нашёл нужного. Буду пробывать перебором foreach, если что отпишу своё решение Если кто знает как проще... ?
$countrysCount = array(); foreach ($countries as $country => $cities) { $countrysCount[$country] = array_sum($cities); }
ногами PHP: <?php $list = array( 'Ukraine' => array( 'Lvov' => 1, 'Odessa' => 3 ), 'Russia' => array ( 'Moskow' => 5, 'St. Petersburg' => 3 ), 'France' => array ( 'Paris' => 2, 'Nice' => 1 ) ); usort($list, 'countsort'); var_export($list); Код (Text): array ( 0 => array ( 'Moskow' => 5, 'St. Petersburg' => 3, 'count' => 8, ), 1 => array ( 'Lvov' => 1, 'Odessa' => 3, 'count' => 4, ), 2 => array ( 'Paris' => 2, 'Nice' => 1, 'count' => 3, ), )
может я не так написал, вывод то сделать легко: Код (Text): foreach ( $show as $k => $v ){ echo $k . ' ('. array_sum ( $show [$k] ) .')'; } мне сортировка важна Simpliest, спасибо, пробую
может есть возможность сортировки по маске? Код (Text): $show = array(c=>...,b=>...,a=>...,d=>...,e=>...); $mask = (a,b,c,d,e); что то типо того?
Kreker Нет там гемора, как хочешь так и верти его. Можешь добавлять count в массив - можешь не добавлять, сортировка работает в любом случае.
создаю 2ой массив, такого типа как в первом посте - Kreker написал, сортирую его и накладываю как маску. А в вашем примере - теряются страны, или я не прав?
Код (Text): $show = Array ( [Ukraine] => Array( [Lvov] => 1 [Odessa] => 3 ) [Russia] => Array ( [Moskow] => 5 [St. Petersburg] => 3 ) [France] => ( Array ( [Paris] => 2 [Nice] => 1 ) ); function cmp($a, $b) { if ($a) if (array_sum ( $a ) == array_sum ( $b )) { return strcmp ( $a, $b ); //сортирует вложенные массывы, а надо ключи } return (array_sum ( $a ) > array_sum ( $b )) ? - 1 : 1; } uasort ( $show, 'cmp' ); не верно сортирует одинаковые элементы... с обычным не асоц. массивом всё ок.... если можно подсказку? там когда сумма равна - сравнивает элементы(вложеные массивы), а нужно ключи сравнить...
PHP: <?php function cmp($a, $b) { //.... uasort($a, 'cmp'); uasort($b, 'cmp'); //.... } uasort($arr, 'cmp');
Все вместе одной функцией не получится. Или по ключам сортируем, или по значениям. Если нужны изыски. комбинируйте.