如何按优先级排序此数组

时间:2012-03-30 06:00:30

标签: php arrays sorting

我有一个类在attach方法中将值设置为$ this->属性。 为简单起见,我会在这里缩短代码:

<?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 个答案:

答案 0 :(得分:0)

usort()允许您通过用户指定的函数对数组进行排序。

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