如何基于公共密钥在PHP中组合两个数组?

我正在尝试基于entry_id键将两个关联数组连接在一起.两个数组都来自单独的数据库资源,第一个存储条目标题,第二个存储条目作者,key =>值对如下:

array (
    'entry_id' => 1,
    'title' => 'Test Entry'
)   

array (
    'entry_id' => 1,
    'author_id' => 2

我正在尝试实现如下的数组结构:

array (
    'entry_id' => 1,
    'author_id' => 2,
    'title' => 'Test Entry'
)

目前,我通过循环遍历每个数组并按照我想要的方式格式化数组来解决问题,但我认为这有点像记忆.

$entriesArray = array();
foreach ($entryNames as $names) {
    foreach ($entryAuthors as $authors) {
        if ($names['entry_id'] === $authors['entry_id']) {
            $entriesArray[] = array(
                'id' => $names['entry_id'],
                'title' => $names['title'],
                'author_id' => $authors['author_id']
            );                          
        }
    }
}

我想知道有一种更简单,内存更少的方法吗?

最佳答案 是否有可能在用于从数据库中检索信息的SQL中执行JOIN而不是在多个查询中获取数据?在数据库级别执行此操作会更快更简洁.

根据您的数据库结构,您可能希望使用类似的东西

SELECT entry_id, title, author_id
FROM exp_weblog_data
INNER JOIN exp_weblog_titles
ON exp_weblog_data.entry_id = exp_weblog_titles.entry_id
WHERE field_id_53 = "%s" AND WHERE entry_id IN ("%s")

Wikipedia has a bit on each type of join

否则,最佳选择可能是重构第一个数组,使其成为title_id到标题的映射

所以:

array(
    array(
       'entry_id' => 1,
       'title' => 'Test Entry 1',
    ),
    array(
       'entry_id' => 3,
       'title' => 'Test Entry 2',
    ),
)

会成为:

array(
    1 => 'Test Entry 1',
    3 => 'Test Entry 2',
)

这意味着合并数组所需的代码简化为:

$entriesArray = array();
foreach ($entryAuthors as $authors) {
    $entriesArray[] = array(
        'id' => $authors['entry_id'],
        'title' => $entryNames[$authors['entry_id']],
        'author_id' => $authors['author_id']
    );                           
}
点赞