Sorting CakePHP更快更好地合并数组
我有两个阵列(型号相同),如下所示:Sorting CakePHP更快更好地合并数组,sorting,cakephp,merge,array-merge,Sorting,Cakephp,Merge,Array Merge,我有两个阵列(型号相同),如下所示: Array ( [0] => Array ( [id] => 17 [user_id] => 1 ) [1] => Array ( [id] => 8 [user_id] => 1 ) [2] => Array ( [id] => 9 [user_id] => 1
Array (
[0] => Array (
[id] => 17
[user_id] => 1
)
[1] => Array (
[id] => 8
[user_id] => 1
)
[2] => Array (
[id] => 9
[user_id] => 1
)
)
及
如何将这两个数组按字段
id
以第一个数组的格式合并?我仍在寻找一个更优雅的解决方案,但这一个似乎有效
$a1 = [
['id' => 17, 'user_id' => 1],
['id' => 8, 'user_id' => 2],
['id' => 9, 'user_id' => 3],
];
$a2 = [
['Post' => ['id' => 9, 'name' => 'name1', 'slug' => 'slug1']],
['Post' => ['id' => 17, 'name' => 'other name', 'slug' => 'other_slug']],
['Post' => ['id' => 8, 'name' => 'lorem', 'slug' => 'lorem_slug']],
];
$a2 = Hash::extract($a2, '{n}.Post');
foreach ($a1 as $key => $value) {
$a1['id_' . $value['id']] = $value;
unset($a1[$key]);
}
foreach ($a2 as $key => $value) {
$a2['id_' . $value['id']] = $value;
unset($a2[$key]);
}
$a3 = array_values(array_replace_recursive($a1, $a2));
debug($a3);
第二,更简单的方法:
foreach ($a1 as &$item) {
foreach ($a2 as $item2) {
if ($item2['Post']['id'] == $item['id']) {
$item = array_merge($item, $item2['Post']);
}
}
}
我现在使用一些类似的:
foreach ($a1 as $order => $result) {
$a1[$order] = array_merge($a1[$order], current(Hash::extract($a2, '{n}.Post[id=' . $result['id'] . ']')));
}
我尝试最小化使用foreach(
Hash
方法也使用foreach)。第一个数组来自哪里?都来自模型,但第一个是HABTM结果,第二个是find('all')。我认为您的代码更好,因为只有Hash::extract
运行3 foreach,谢谢!我可以使用foreach($a1 as&$item){
然后$item=…
或foreach($a1 as$order=>$result){
和$a1[$order]
,就像你做的那样
foreach ($a1 as $order => $result) {
$a1[$order] = array_merge($a1[$order], current(Hash::extract($a2, '{n}.Post[id=' . $result['id'] . ']')));
}