我有一个$ Model-> find()查询的输出数组,它也从hasMany关系中提取数据:
Array(
[Parent] => Array
(
[id] => 1
)
[Child] => Array
(
[0] => Array
(
[id] => aaa
[score] => 3
[src] => stage6/tn~4bbb38cc-0018-49bf-96a9-11a0f67883f5.jpg
[parent_id] => 1
)
[1] => Array
(
[id] => bbb
[score] => 5
[src] => stage0/tn~4bbb38cc-00ac-4b25-b074-11a0f67883f5.jpg
[parent_id] => 1
)
[2] => Array
(
[id] => ccc
[score] => 2
[src] => stage4/tn~4bbb38cc-01c8-44bd-b71d-11a0f67883f5.jpg
[parent_id] => 1
)
)
)
我想将此输出转换为类似的内容,其中child id是其他子属性的关键:
Array(
[aaa] => Array
(
[score] => 3
[src] => stage6/tn~4bbb38cc-0018-49bf-96a9-11a0f67883f5.jpg
)
[bbb] => Array
(
[score] => 5
[src] => stage0/tn~4bbb38cc-00ac-4b25-b074-11a0f67883f5.jpg
)
[ccc] => Array
(
[score] => 2
[src] => stage4/tn~4bbb38cc-01c8-44bd-b71d-11a0f67883f5.jpg
)
}
有没有一种简单的方法可以使用Set :: extract,Set :: combine,Set :: insert等来有效地执行此操作?我无法理解。
答案 0 :(得分:2)
我已经使用Set::combine
这样做了几次,但我不能为效率做出论证。举个例子,我有一份志愿者名单,每个志愿者都属于一个团体。我想检索每个委员会及其志愿者,但作为一个由委员会名称键入的关联数组。这是我过去常用的代码:
$volunteers = Set::combine (
$this->Volunteer->Committee->find (
'all',
array ( 'order' => 'display_order' )
),
'{n}.Committee.title',
'{n}.Volunteer'
);
希望这会有所帮助。 documentation for Set::combine
可能有助于详细说明细节。
答案 1 :(得分:1)
正如罗布所说,Set::combine
是你问题的答案。这是一个使用XPath 2.0语法的示例解决方案:
$parents = $this->Parent->find('all');
$assocChildren = Set::combine( $parents, '/Child/id', '/Child' );