Я пытаюсь сортировать свой массив по размеру дочернего массива, и я использую его с uasort
, но код уродливый и выглядит так, как будто это могло быть сделано лучше, так как есть много дублирующего кода.Улучшение массива сортировки по размеру дочернего массива
Как я могу улучшить этот тип переключателя/случая, который я создал?
switch ($this->view->sort_key_num) {
case 1: // Date
if ($this->view->sort_key_type == 1)
krsort($this->view->content);
break;
case 2: // Likes
function sort_like(&$a, &$b) { return ($a['likes'] > $b['likes']) ? 1 : -1; }
uasort($this->view->content, 'sort_like');
if ($this->view->sort_key_type == 1)
$this->view->content = array_reverse($this->view->content);
break;
case 3: // new content
function sort_entries(&$a, &$b) { return ($a['newcontent'] > $b['newcontent']) ? 1 : -1; }
uasort($this->view->content, 'sort_entries');
if ($this->view->sort_key_type == 1)
$this->view->content = array_reverse($this->view->content);
break;
case 4: // comments
function sort_comments(&$a, &$b) { return ($a['comments'] > $b['comments']) ? 1 : -1; }
uasort($this->view->content, 'sort_comments');
if ($this->view->sort_key_type == 1)
$this->view->content = array_reverse($this->view->content);
break;
case 5: // facebook
function sort_facebook(&$a, &$b) { return ($a['facebook'] > $b['facebook']) ? 1 : -1; }
uasort($this->view->content, 'sort_facebook');
if ($this->view->sort_key_type == 1)
$this->view->content = array_reverse($this->view->content);
break;
case 6: // twitter
function sort_twitter(&$a, &$b) { return ($a['twitter'] > $b['twitter']) ? 1 : -1; }
uasort($this->view->content, 'sort_twitter');
if ($this->view->sort_key_type == 1)
$this->view->content = array_reverse($this->view->content);
break;
case 7: // email
function sort_email(&$a, &$b) { return ($a['email'] > $b['email']) ? 1 : -1; }
uasort($this->view->content, 'sort_email');
if ($this->view->sort_key_type == 1)
$this->view->content = array_reverse($this->view->content);
break;
case 8: // google
function sort_google(&$a, &$b) { return ($a['google'] > $b['google']) ? 1 : -1; }
uasort($this->view->content, 'sort_google');
if ($this->view->sort_key_type == 1)
$this->view->content = array_reverse($this->view->content);
break;
case 10: // views
function sort_views(&$a, &$b) { return ($a['views'] > $b['views']) ? 1 : -1; }
uasort($this->view->content, 'sort_views');
if ($this->view->sort_key_type == 1)
$this->view->content = array_reverse($this->view->content);
break;
}
Непостижимо, что этот код запускается на сервере с php php. 5.2 не поддерживает замыкания, подобные этому пользователю. Хорошая работа, хотя, я все еще застрял в php 5.2, поэтому я не думал о закрытии. Похоже на мой, но с 5.3 саваром ... –
@MathieuDumoulin Спасибо за подсказку, не знал, что анонимные функции не были реализованы раньше этого. – kba