【问题标题】:Merge two indexed arrays of indexed arrays based on first column value根据第一列值合并两个索引数组的索引数组
【发布时间】:2012-02-11 09:07:00
【问题描述】:

我有两个这样的数组:

$array1 = [
    [10, 'Some Name..'],
    [11, 'Some Name..'],
    [13, 'Some Name..'],
];

$array2 = [
    [13, 'Viewed']
];

如何在不循环的情况下合并这两个数组?是否有任何可用的 php 功能?我需要这种输出:

[
    [10, 'Some Name..'],
    [11, 'Some Name..'],
    [13, 'Some Name..', 'Viewed']
]

【问题讨论】:

  • 为什么您受限于不使用循环的解决方案?您是否知道任何解决方案都会涉及循环,即使它没有明确出现在 PHP 代码中?
  • 循环有什么问题?
  • @ Zulkhaery Basrul - 是的,我检查了那个问题。请先阅读我的问题。我可以通过在我的 php 代码中循环我的数组来做到这一点。但我想知道我是否可以不使用任何循环来做到这一点。还有人认为 array_merge 不会给出我在问题中打印的正确结果。

标签: php arrays multidimensional-array merge grouping


【解决方案1】:

不会有非循环方式来实现这一点。也许您正在寻求基于函数的语法,但对于这种情况,我认为这只会引入不必要的卷积。

为获得最佳效率,请生成一个兼作查找数组的结果数组。如果结果数组中已经存在键,则只需将[1] 值推入该行。如果您想重新索引结果,只需调用 array_values() 即可。

代码:(Demo)

$array1 = [
    [10, 'Some Name..'],
    [11, 'Some Name..'],
    [13, 'Some Name..'],
];

$array2 = [
    [13, 'Viewed']
];

$result = [];
foreach (array_merge($array1, $array2) as $row) {
    if (!isset($result[$row[0]])) {
        $result[$row[0]] = $row;
    } else {
        $result[$row[0]][] = $row[1];
    }
}

var_export($result);

功能风格:(Demo)

var_export(
    array_reduce(
        array_merge($array1, $array2),
        function($result, $row) {
            if (!isset($result[$row[0]])) {
                $result[$row[0]] = $row;
            } else {
                $result[$row[0]][] = $row[1];
            }
            return $result;
        }
    )
);

【讨论】:

    【解决方案2】:

    您可以使用 PHP 函数 array_merge_recursive。 看例子:

    <?php
    $ar1 = array("color" => array("favorite" => "red"), 5);
    $ar2 = array(10, "color" => array("favorite" => "green", "blue"));
    $result = array_merge_recursive($ar1, $ar2);
    print_r($result);
    ?>
    

    【讨论】:

    • 为什么这个答案会被接受?示例输入与索引数组的索引数组不同。太多的研究人员被这个答案愚弄了!我的 DV 的失败证明和原因:3v4l.org/RaEOR
    • 请不要盲目地直接从手册中复制粘贴文本。答案应根据 OP 的问题量身定制,并在提供时尊重样本数据。
    • 为什么这个答案会被接受?示例输入与索引数组的索引数组不相似,并且输出不是预期的
    猜你喜欢
    • 2015-10-28
    • 2012-03-21
    • 1970-01-01
    • 2015-06-03
    • 2023-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-02
    相关资源
    最近更新 更多