使用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做的方法。
答案 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
否则您将获得"未定义的索引"通知