2012-03-30 66 views
0

我有一个类,它将值设置为$ this->属性在一个attach方法中。 我会在这里缩短代码简单起见:如何按优先级排序此数组

<?php 
class Event 
{ 
    protected $properties = array(); 

    public function attach($event_name, $context, $event, $callback, $priority) 
    { 
     $this->properties [$event_name] = array(
       $context, 
       $event, 
       $callback, 
       $priority, 
     ); 
    } 

    public function dispatchAll($context = '0') 
    { 
     foreach($this->properties as $p) { 
      if($p[0] == $context) { 
       $this->dispatch($p[1]); 
      } else { 
       continue; 
      } 
     } 
    } 

    public function dispath($event_name) 
    { 
     // implentation not necessary for this question 
    } 
} 

我需要的是“背景下,优先”排序$this->properties,这样我可以运行匹配我的应用程序在方兴未艾为了上下文的代码。

娄仅有3组性质的var_dump

array(3) { 
    ["StartUp"]=> 
    array(4) { 
    [0]=> 
    string(1) "1" 
    [1]=> 
    string(7) "StartUp" 
    [2]=> 
    array(3) { 
     [0]=> 
     string(9) "Bootstrap" 
     [1]=> 
     string(7) "startup" 
     [2]=> 
     array(2) { 
     [0]=> 
     int(1) 
     [1]=> 
     object(Event)#6 (4) { 
      ["name":protected]=> 
      NULL 
      ["target":protected]=> 
      NULL 
      ["parameters":protected]=> 
      *RECURSION* 
      ["result":protected]=> 
      NULL 
     } 
     } 
    } 
    [3]=> 
    int(0) 
    } 
    ["View"]=> 
    array(4) { 
    [0]=> 
    string(1) "1" 
    [1]=> 
    string(4) "View" 
    [2]=> 
    array(2) { 
     [0]=> 
     string(9) "Bootstrap" 
     [1]=> 
     string(4) "view" 
    } 
    [3]=> 
    array(1) { 
     [0]=> 
     object(Event)#6 (4) { 
     ["name":protected]=> 
     NULL 
     ["target":protected]=> 
     NULL 
     ["parameters":protected]=> 
     *RECURSION* 
     ["result":protected]=> 
     NULL 
     } 
    } 
    } 
    ["ShutDown"]=> 
    array(4) { 
    [0]=> 
    string(1) "3" 
    [1]=> 
    string(8) "ShutDown" 
    [2]=> 
    array(2) { 
     [0]=> 
     string(9) "Bootstrap" 
     [1]=> 
     string(8) "shutdown" 
    } 
    [3]=> 
    array(1) { 
     [0]=> 
     object(Event)#6 (4) { 
     ["name":protected]=> 
     NULL 
     ["target":protected]=> 
     NULL 
     ["parameters":protected]=> 
     *RECURSION* 
     ["result":protected]=> 
     NULL 
     } 
    } 
    } 
} 
+1

你可以发布'$ properties'的转储吗? – F21 2012-03-30 06:02:43

+0

我已经将var_dump放在问题 – 2012-03-30 06:24:52

回答

0

usort()让你排序用户指定的功能的阵列。

或者,如果从数据库填充数组,则可以始终在查询中使用ORDER BY以按所需顺序返回元素。

+0

的旁边我已经尝试使用usort()但没有成功......实际上有很多其他变体。这就是为什么我发布上述标题......'因为他们是很多尝试...我觉得我是一个新手...... hehehe – 2012-03-31 05:15:45