CakePHP - 单独排序结果数组

时间:2016-01-13 11:57:36

标签: php arrays sorting cakephp

使用CakePHP 2.7,我有一系列查找结果:

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;
        }
    }
}

我知道Cake有Hash实用程序(以前称为'Set')来处理数组,但我找不到用Has做的方法。

1 个答案:

答案 0 :(得分:1)

我会这样做:

onClick(View v)

第一行用$indexed_results = Hash::combine($results , '{n}.Foo.bar_id', '{n}'); foreach($order as $index) { $sortedResults[] = $indexed_results[$index]; } 的相互关联值替换$results中的索引,以便您可以执行单个循环

修改:除非您确定bar_id中的每个值都有,否则您必须检查数组中是否存在$index。通讯员$order否则您将获得"未定义的索引"通知