gpt4 book ai didi

php - 在 PHP 中合并 2 个数组,只保留第一个数组中的键

转载 作者:行者123 更新时间:2023-12-04 16:07:24 27 4
gpt4 key购买 nike

我有这两个数组:

$list = [
'fruit' => [],
'animals' => [],
'objects' => [],
];

$dataArray = [
'fruit' => 'apple',
'animals' => ['dog', 'cat'],
'asd' => 'bla'
];

我想合并它们,以便最后的 $list 是:
[fruit] => Array
(
[0] => apple
)

[animals] => Array
(
[0] => dog
[1] => cat
)

[objects] => Array
(
)

所以,需要注意的事项:
  • 即使 'fruit' 只有一个元素,它仍然是 $list
  • 中的一个数组
  • $list 中缺少的键('asd' 键)会被忽略
  • 没有值的键仍然保留,即使为空

  • 使用 array_merge 不起作用:
    $merged = array_merge($list, $dataArray);

    [fruit] => apple
    [animals] => Array
    (
    [0] => dog
    [1] => cat
    )

    [objects] => Array
    (
    )

    [asd] => bla

    我设法得到了我想要的东西:
    foreach ($dataArray as $key => $value) {
    if (isset($list[$key])) {
    if (is_array($value)) {
    $list[$key] = $value;
    }
    else {
    $list[$key] = [$value];
    }

    }

    }

    但我想知道是否有更简洁的方法来做到这一点,或者我不知道其他一些 php 函数。

    最佳答案

    您可以通过以下几个步骤来实现:

    $result = array_intersect_key($dataArray, $list);

    这将返回一个包含第一个数组中所有元素的数组,然后根据第二个数组中的键进行过滤。这给你:
    Array
    (
    [fruit] => apple
    [animals] => Array
    (
    [0] => dog
    [1] => cat
    )
    )

    然后,您可以使用以下命令重新添加第一个数组中缺少的键:
    $result + $list;
    +的区别运算符和 array_merge是前者不会使用第二个数组中的值覆盖第一个数组。它只会添加任何缺失的元素。

    在一行中,结果如下:
    $result = array_intersect_key($dataArray, $list) + $list;

    你可以在这里看到它的实际效果: https://eval.in/865733

    编辑:抱歉,完全错过了将元素保留为数组的部分。如果它们始终是数组,那么您可以添加一个快速的单行代码,例如:
    $result = array_map(function ($e) { return (array) $e; }, $result);

    这会将所有顶级元素转换为数组。如果您的逻辑比这更复杂,那么我不确定您会找到一种使用内置函数来做到这一点的方法,抱歉。

    关于php - 在 PHP 中合并 2 个数组,只保留第一个数组中的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46341258/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com