2016-01-13 53 views
1

使用CakePHP 2.7,我的发现结果的数组:CakePHP的 - 排序结果阵列单独

array(
    (int) 0 => array(
     'Foo' => array(
      'id' => '786', 
      'bar_id' => '12', 
      // more data 
     ), 
     'Bar' => array(
      'id' => '12', 
      // more data 
     ) 
    ), 
    (int) 1 => array(
     'Foo' => array(
      'id' => '785', 
      'bar_id' => '13', 
      // more data 
     ), 
     'Bar' => array(
      'id' => '13', 
      // more data 
     ) 
    ), 
    // many more results 

现在我想确实有它的“bar_id”的定义个人方式排序,不是数字。排序顺序在另一个数组描述:

array(9, 3, 18, 36, …) 

有没有更好的办法把它做的,但在循环遍历排序阵列,挑电流id然后将结果阵列上的循环(循环内的循环)看那里的相应'bar_id',如果发现写结果到一个新的结果数组?

$results = array(…); // the results 
$order = array(9, 3, 18, 36, …); 
$sortedResults = array(); 
foreach ($order as $barId) { 
    foreach ($results as $result) { 
     if ($barId == $result['Foo']['bar_id']) { 
      $sortedResults[] = $result; 
      break; 
     } 
    } 
} 

我知道蛋糕有哈希实用程序(原名“设置”)与阵列的工作,但我不能找到一种方法用了这样做。

回答

1

我会做这样的:

$indexed_results = Hash::combine($results , '{n}.Foo.bar_id', '{n}'); 

foreach($order as $index) 
{ 
    $sortedResults[] = $indexed_results[$index]; 
} 

第一行替换的bar_id的corrispondant值$results索引,所以你可以做一个单循环

编辑:可能是你必须检查$index实际上是否存在于您的阵列中,除非您确定$order中的每个值都有对应的bar_id否则您会收到“未定义索引”通知

+0

谢谢,arilia。它工作得很好!对不起,我的名声不够高,无法投票回答你的答案。 – Christian