我正在尝试根据 entry_id
键将两个关联数组连接在一起。两个数组都来自各个数据库资源,第一个存储词条标题,第二个存储词条作者,键=>值对如下:
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
否则最好的选择可能是重构第一个数组,使其成为 entry_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']
);
}
关于php - 如何根据公共(public)键在 PHP 中组合两个数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2492327/