php - 如何根据公共(public)键在 PHP 中组合两个数组?

标签 php arrays

我正在尝试根据 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/

相关文章:

C 的循环右移导致数组时间超过无限循环?

php - 网页仍在加载 - 检查它正在等待什么

php - 用于分割除 URL 之外的字符串的正则表达式

php - Apache 服务器上的 500 错误 - "AllowOverride not allowed here"

ios - Swift - 使用 'as! Dictionary<String, AnyObject>' 时为零

arrays - MongoDB 聚合 - 嵌套数组的总和值

php - 在访问$_POST、$_GET等变量时避免在PHP中使用isset?

php - mysql中使用条件的值总和

c++ - 使用 memcpy 填充后删除动态二维数组时中止(核心转储)

java - 如何将混合 Java 数据类型转换为 Java 字节数组?