我想通过一个子数组值来排序我的数组,我使用这个与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;
}
虽然这段代码是在5.3 php服务器上运行的, 5.2不支持此用户建议的关闭。不错的工作,但我仍然坚持在PHP 5.2,所以我没有考虑关闭方式。看起来像我的,但有5.3的味道... – 2012-01-04 16:12:58
@MathieuDumoulin感谢您的提示,不知道匿名函数没有实现早。 – kba 2012-01-04 16:24:29