Проблема с сортировкой числовых значений в многомерном массиве
Обновление - я исправил имена ключей. Вот мой новый код. Я заставил каждый сорт работать правильно, если я закомментировал предыдущий вид. Если предыдущая сортировка выполняется, следующая сортировка не будет работать должным образом. Почему это происходит и как я могу решить это?
<?php
$poptable=array(
array('State' => 'Alabama',
'Capital' => 'Montgomery',
'pop2010' => 4779736,
'poprank' => 23),
array('State' => 'Alaska',
'Capital' => 'Juneau',
'pop2010' => 710231,
'poprank' => 47),
array('State' => 'Arizona',
'Capital' => 'Phoenix',
'pop2010' => 6329017,
'poprank' => 18),
array('State' => 'Arkansas',
'Capital' => 'Little Rock',
'pop2010' => 2915918,
'poprank' => 32),
array('State' => 'California',
'Capital' => 'Sacramento',
'pop2010' => 37253956,
'poprank' => 1),
array('State' => 'Colorado',
'Capital' => 'Denver',
'pop2010' => 5029196,
'poprank' => 22),
array('State' => 'Connecticut',
'Capital' => 'Hartford',
'pop2010' => 3518288,
'poprank' => 29),
array('State' => 'Delaware',
'Capital' => 'Dover',
'pop2010' => 897934,
'poprank' => 45),
array('State' => 'Florida',
'Capital' => 'Tallahassee',
'pop2010' => 18801301,
'poprank' => "4"),
array('State' => 'Georgia',
'Capital' => 'Atlanta',
'pop2010' => 9687653,
'poprank' => 9),
array('State' => 'Hawaii',
'Capital' => 'Boise',
'pop2010' => 1360301,
'poprank' => 42));
//Read column data into rows
foreach ($poptable as $key => $row)
{
$state[$key] = $row['State'];
$capital[$key] = $row['Capital'];
$pop2010[$key] = $row['pop2010'];
$poprank[$key] = $row['poprank'];
}
//foreach ($poptable as $row) {
// foreach ($row as $key => $value){
// ${$key}[] = $value;}}
echo "<pre>";
//Sort data by state name in ascending order
array_multisort($state, SORT_ASC, $poptable);
//Output sorted data
print_r($poptable);
echo "<hr>";
//Sort data by capital in descending order
array_multisort($capital, SORT_DESC, $poptable);
//Output sorted data
print_r($poptable);
echo "<hr>";
//Sort data by population in ascending order
array_multisort($pop2010, SORT_ASC, SORT_NUMERIC, $poptable);
//Output sorted data
print_r($poptable);
echo "<hr>";
//Sort data by population rank in descending order
array_multisort($poprank, SORT_DESC, SORT_NUMERIC, $poptable);
//OUTPUT sorted data
print_r($poptable);
echo "</pre>";
?>
Я пытаюсь отсортировать многомерный массив. Однако array_multisort не работает так, как я думал. Я должен использовать array_multisort. Мои первые два сорта работают правильно (штат и столица). Что не сортируется должным образом, так это числовые значения для pop2010 и poprank keys. Я попытался сделать их строками, числами и т. Д. Мой вывод для отсортированных числовых значений, кажется, не в каком-либо реальном порядке. Вот мой массив.
$poptable=array(
array('State' => 'Alabama',
'Capital' => 'Montgomery',
'pop2010' => 4779736,
'poprank' => "23"),
array('State' => 'Alaska',
'Capital' => 'Juneau',
'pop2010' => 710231,
'poprank' => "47"),
array('State' => 'Arizona',
'Capital' => 'Phoenix',
'pop2010' => 6329017,
'poprank' => "18"),
array('State' => 'Arkansas',
'Capital' => 'Little Rock',
'pop2010' => 2915918,
'poprank' => "32"),
array('State' => 'California',
'Capital' => 'Sacramento',
'pop2010' => 37253956,
'poprank' => "1"),
array('State' => 'Colorado',
'Capital' => 'Denver',
'pop2010' => 5029196,
'poprank' => "22"),
array('State' => 'Connecticut',
'Capital' => 'Hartford',
'pop2010' => 3518288,
'poprank' => "29"),
array('State' => 'Delaware',
'Capital' => 'Dover',
'pop2010' => 897934,
'poprank' => "45"),
array('State' => 'Florida',
'Capital' => 'Tallahassee',
'pop2010' => '18,801,301',
'poprank' => '4'),
array('State' => 'Georgia',
'Capital' => 'Atlanta',
'pop2010' => '9,687,653',
'poprank' => '9'),
array('State' => 'Hawaii',
'Capital' => 'Boise',
'pop2010' => '1,360,301',
'poprank' => '42'));
echo "<pre>"
//Sort data by state name in ascending order
array_multisort($State, SORT_ASC, $poptable);
//Output sorted data
print_r($poptable);
echo "<hr>";
//Sort data by capital in descending order
array_multisort($Capital, SORT_DESC, $poptable);
//Output sorted data
print_r($poptable);
echo "<hr>";
//Sort data by population
array_multisort($poprank, SORT_STRING, SORT_DESC, $poptable);
//Output sorted data
print_r($poptable);
echo "<hr>";
echo "</pre>";
?>
1 ответ
Решение
Попробуй это
array_multisort($key1, SORT_ASC, $key2, SORT_DESC, $arrayname);