2013-09-18 3 views
0

у меня есть это $ страны массив:Сортировка многомерного массива по значениям алфавитно (первые числа, то буквы)

Array ([0] => 2013 Germany [1] => country [2] => Berlin [3] => Beer) 
Array ([0] => 2012 Italy [1] => country [2] => Rome [3] => Wine ) 
Array ([0] => 2013 Germany [1] => country [2] => Munich [3] => Beer) 
Array ([0] => 2013 Germany [1] => country [2] => Dusseldorf [3] => Beer) 
Array ([0] => 2013 Italy [1] => country [2] => Venice [3] => Wine) 
Array ([0] => 2013 Russia ....) etc 

Я хотел бы, чтобы отсортировать их в порядке возрастания года, так что я бы что-то вроде

Array ([0] => 2012 Italy [1] => country [2] => Rome [3] => Wine ) 
Array ([0] => 2013 Germany [1] => country [2] => Berlin [3] => Beer) 
Array ([0] => 2013 Germany [1] => country [2] => Munich [3] => Beer).... 

Я попытался рода, asort и natsort, но ни один из них не похоже на работу до сих пор.

Любые идеи?

+2

Итак, вы пропустили магический [usort()] (http://php.net/manual/en/function.usort.php) –

+0

asort должен работать, я устал и отлично работаю. –

ответ

1
foreach ($countries as $key => $row) { 
    $year[$key] = $row[0]; 
} 


array_multisort($year, SORT_ASC, $countries); 
1

Вы должны сортировать многомерные массивы по array_multisort функции.

Сначала вы должны подготовить сортировки массива, то вы применяете сортировки себя:

$sortArr = array(); 

// prepare the sorting array 
foreach ($arrayToSort as $row) { 
    $sortArr[] = $row[0]; // put there the year value 
} 

// sorting - first param is helper array, then constant with sorting direction, third param is array you wish to sort 
array_multisort($sortArr, SORT_ASC, $arrayToSort); 
+0

Пробовал это, все еще получая их в оригинальном порядке – IreM

+0

Какова ваша версия PHP? Он работает для меня в 5.3.21, но я уверен, что он работает в нескольких второстепенных версиях. – muffir

+0

Используя 5.3.23, я действительно не понимаю, как работает упорядочение. Я пытаюсь использовать разные константы во второй части линии DESC, NUMERIC и т. Д., И это немного меняется, но я никогда не увижу 2012 на первой строке. – IreM

1

Попробуйте использовать usort. Посмотрите на пример # 2 в документации (http://www.php.net/manual/en/function.usort.php ):

Пример # 2 usort() пример с использованием многомерного массива

<?php 
function cmp($a, $b) 
{ 
    return strcmp($a["fruit"], $b["fruit"]); 
} 

$fruits[0]["fruit"] = "lemons"; 
$fruits[1]["fruit"] = "apples"; 
$fruits[2]["fruit"] = "grapes"; 

usort($fruits, "cmp"); 

while (list($key, $value) = each($fruits)) { 
    echo "\$fruits[$key]: " . $value["fruit"] . "\n"; 
} 
?> 

При сортировке многомерного массива $ а и $ b содержат ссылки на первый индекс массива. Приведенный выше пример выведет:

$fruits[0]: apples 
$fruits[1]: grapes 
$fruits[2]: lemons 
+0

Я пробовал использовать usort, я новичок в php, у меня появилось множество предупреждений, поэтому я действительно не думаю, что использовал его правильно. – IreM

0

Я скопировал ваш массив сделать это без ключевого значения, как:

$test = array (Array ( '2013 Germany', 'country', 'Berlin ', 'Beer'), 
Array ( '2012 Italy' , 'country' , 'Rome', 'Wine' ), 
Array ( '2013 Germany' , 'country' , 'Munich' , 'Beer'), 
Array ( '2013 Germany', 'country' , 'Dusseldorf', 'Beer'), 
Array ( '2013 Italy' , 'country' , 'Venice' , 'Wine') 
); 

После этого у меня есть польза:

asort($test); 
$test = array_values($test);  
print_r($test); 

И вне положенный был:

Array 
(
    [0] => Array 
     (
      [0] => 2012 Italy 
      [1] => country 
      [2] => Rome 
      [3] => Wine 
     ) 

    [1] => Array 
     (
      [0] => 2013 Germany 
      [1] => country 
      [2] => Berlin 
      [3] => Beer 
     ) 

    [2] => Array 
     (
      [0] => 2013 Germany 
      [1] => country 
      [2] => Dusseldorf 
      [3] => Beer 
     ) 

    [3] => Array 
     (
      [0] => 2013 Germany 
      [1] => country 
      [2] => Munich 
      [3] => Beer 
     ) 

    [4] => Array 
     (
      [0] => 2013 Italy 
      [1] => country 
      [2] => Venice 
      [3] => Wine 
     ) 

) 

Надеюсь, что вы ищете это.

Смежные вопросы