2014-07-03 31 views
1

我有以下阵列:PHP排序数组子阵列两个字段

array(
[0] =>array(
    'Users'=>array(
     'id'=>2, 
     'start_date'=>2014-02-05, 
     'end_date'=>2014-02-09 
    ) 
), 
    [1]=> array(
    'Users'=>array(
     'id'=>3, 
     'start_date'=>2014-02-05, 
     'end_date'=>2014-02-09 
    ) 
), 
    [2]=> array(
    'Users'=>array(
     'id'=>4, 
     'start_date'=>2014-02-09, 
     'end_date'=>2014-02-12 
    ) 
), 
    [3]=> array(
    'Users'=>array(
     'id'=>5, 
     'start_date'=>2014-02-15, 
     'end_date'=>2014-02-25 
    ) 
) 
) 

我需要做的排序是这样的阵列分为子阵列,其中两个起始日期日期和结束日期匹配这样的:

array(
    [0] => array(
     'Users'=>array(
      [0] => array(
      'id'=>2, 
      'start_date'=>2014-02-05, 
      'end_date'=>2014-02-09 
     ), 
      [1] => array(
      'id'=>3, 
      'start_date'=>2014-02-05, 
      'end_date'=>2014-02-09 
     ) 
     ) 
    ), 
    [1] => array(
     'Users'=>array(
      [0] => array(
      'id'=>4, 
      'start_date'=>2014-02-09, 
      'end_date'=>2014-02-12 
     ) 
     ) 
    ), 
    [2] => array(
     'Users'=>array(
      [0] => array(
      'id'=>5, 
      'start_date'=>2014-02-15, 
      'end_date'=>2014-02-25 
     ) 
     ) 
    ) 
) 

我知道如何在一个领域做到这一点,但我没有完全管理两个领域。

编辑: 什么我基本上是试图做的是没有那么多一种更一批像数组的元素融入子阵列。

+6

嘛,你尝试过什么?请发布前面的/当前的尝试,并确切地说他们失败的地方 – kero

+0

你需要为此创建你自己的功能。并使用usort方法 –

+0

可能的重复[参考:在PHP中排序数组和数据的所有基本方法](http://stackoverflow.com/questions/17364127/reference-all-basic-ways-to-sort-arrays-and -data-in-php) –

回答

2

或者,您可以创建一个新的。当然,你需要循环它们并根据start_dateend_date对它们进行分组(我不知道Cake是否为这项任务提供了一个优雅的解决方案,但我没有使用它。)。考虑下面这个例子:

$values = array(array('Users' => array(array('id' => 2, 'start_date' => '2014-02-05', 'end_date' => '2014-02-09'),)),array('Users' => array(array('id' => 3, 'start_date' => '2014-02-05', 'end_date' => '2014-02-09'),)),array('Users' => array(array('id' => 4, 'start_date' => '2014-02-09', 'end_date' => '2014-02-12'),)),array('Users' => array(array('id' => 5, 'start_date' => '2014-02-15', 'end_date' => '2014-02-25'),)),); 
$new_values = array(); 
foreach($values as $key => $value) { 
    $value = reset($value); // users 
    foreach($value as $element) { 
     // group them according to start and date date 
     // make them an index 
     $index = $element['start_date'] . ' to ' . $element['end_date']; 
     $new_values[$index]['Users'][] = $element; 
    } 
} 

$new_values = array_values($new_values); // simple reindexing, reset to numeric 
echo '<pre>'; 
print_r($new_values); 

应该产生这组:

Array 
(
    [0] => Array 
    (
     [Users] => Array 
     (
      [0] => Array 
      (
       [id] => 2 
       [start_date] => 2014-02-05 
       [end_date] => 2014-02-09 
      ) 

      [1] => Array 
      (
       [id] => 3 
       [start_date] => 2014-02-05 
       [end_date] => 2014-02-09 
      ) 
     ) 
    ) 

    [1] => Array 
    (
     [Users] => Array 
     (
      [0] => Array 
      (
       [id] => 4 
       [start_date] => 2014-02-09 
       [end_date] => 2014-02-12 
      ) 
     ) 
    ) 

    [2] => Array 
    (
     [Users] => Array 
     (
      [0] => Array 
      (
       [id] => 5 
       [start_date] => 2014-02-15 
       [end_date] => 2014-02-25 
      ) 
     ) 
    ) 
)