Intereting Posts
Как сделать вывод TWIG переменной для последующего использования (symfony2)? Сохранение значений в полях форм при неудачной проверке данных Почему этот процесс не работает в фоновом режиме? Добавьте <a> к каждому слову внутри <h3> PHP: как проверить, установлена ​​ли дата сегодня, вчера или завтра Простой файл загрузки XML не работает Symfony2 / Datatable Bundle – ошибка: установите идентификатор datatable в вашем действии с помощью «setDatatableId», используя идентификатор из вашего представления передать значение переменной php в javascript Как добавить окно подтверждения в php перед удалением? php json_encode не возвращает правильную кодировку json Скрипт, подпадающий под запросы MySQL, но не указана ошибка? Как построить следующие и предыдущие ссылки с php? PHP: изменение реферирования с заголовком () Переход от базы данных к сеансам Codeigniter 2.0 контроллер по умолчанию для подпапки не работает на сервере, но работает в localhost

сортировка массивов по месяцам

Возможный дубликат:
Функция сортировки массива в PHP

У меня такой массив

Array ( [May] => 10904 [Jan] => 9269 [Jun] => 3743 [Feb] => 3507 [Mar] => 6017 [Apr] => 4966 ) 

Как я могу сортировать их по месяцам. Январь, февраль, март и т. Д. …

Я попробовал это без везения.

 $ytdCommissions = array_flip($ytdCommissions); usort($ytdCommissions,'monthCompare'); function monthCompare($a, $b) { $months = array('JAN' => 1, 'FEB' =>2,'MAR' => 3,'APR' => 4,'MAY' => 5,'JUN' => 6,'JULY' => 7,'AUG' => 8, 'SEP' => 9, 'OCT' => 10, 'NOV' => 11, 'DEC' => 12); if($a == $b) { return 0; } return ($months[$a] > $months[$b]) ? 1 : -1; } 

Благодаря!

1.) вам нужно использовать uksort мере сортировки ключей

2.) вы должны сравнить прописные буквы, чтобы соответствовать вашему месячному массиву:

 $a = strtoupper($a); $b = strtoupper($b); 

Попробуйте сделать несколько месяцев:

 $months = array("Jan", "Feb", "March", "etc..."); 

Затем для каждого месяца присваивайте им любые значения, которые вам нравятся:

 $months[0] = 9269; // Jan $months[2] = 6017; // March 

Тогда месяцы – это всего лишь ключи массива $months , $months[0]январь и $months[11]декабрь .

Вы сортировали сортировку, которая предназначена для значений. Должен использовать uksort. Также удалили массив, который вы построили, поскольку я думал, что он лишний:

 $arr = array( "May" => 10904, "Jan" => 9269, "Jun" => 3743, "Feb" => 3507, "Mar" => 6017, "Apr" => 4966, ); uksort($arr,'monthCompare'); var_dump($arr); function monthCompare($a, $b) { //$months = array('JAN' => 1, 'FEB' =>2,'MAR' => 3,'APR' => 4,'MAY' => 5,'JUN' => 6,'JULY' => 7,'AUG' => 8, 'SEP' => 9, 'OCT' => 10, 'NOV' => 11, 'DEC' => 12); $aMonth = date("m", strtotime($a)); $bMonth = date("m", strtotime($b)); if($a == $b) { return 0; } return ($aMonth > $bMonth) ? 1 : -1; } 
 $data = array( 'May' => 10904, 'Jan' => 9269, 'Jun' => 3743, 'Feb' => 3507, 'Mar' => 6017, 'Apr' => 4966, ); $sort = array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'); uksort($data, function($value1, $value2) use ($sort) { return array_search($value1,$sort) > array_search($value2,$sort); } ); var_dump($data); 

Это раздражает, но, похоже, нет другого пути.

Вот кратчайший код, который я мог бы выработать:

 <? $months[May] = 10904; $months[Jan] = 9269; $months[Jun] = 3743; $months[Feb] = 3507; $months[Mar] = 6017; $months[Apr] = 4966; for($m=1;$m<=12;$m++) { $m_index[date("M",mktime(0,0,0,$m,1,2000))] = $m; } foreach($months as $i => $v) { $months_out[$m_index[$i]] = $v; } ksort($months_out); print_r($months_out); ?> 

Возвращает

 Array ( [1] => 9269 [2] => 3507 [3] => 6017 [4] => 4966 [5] => 10904 [6] => 3743 ) 
 function monthCompare($a, $b) { $months = array('JAN' => 1, 'FEB' =>2,'MAR' => 3,'APR' => 4,'MAY' => 5,'JUN' => 6,'JULY' => 7,'AUG' => 8, 'SEP' => 9, 'OCT' => 10, 'NOV' => 11, 'DEC' => 12); if($a[0] == $b[0]) { return 0; } return ($months[$a[0]] > $months[$b[0]]) ? 1 : -1; } $ytdCommissions = array( array('MAY' , 10904), array('JAN' , 9269), array('JUN' , 3743), array('FEB' , 3507), array('MAR' , 6017), array('APR' , 4966) ); usort($ytdCommissions,'monthCompare'); print_r($ytdCommissions); 
  • Вы используете заглавные буквы в течение $months : JAN против Jan on $ytdCommissions
  • Массив $ytdCommissions не построен правильно для использования usort – проверьте мой пример выше