【问题标题】:Merge values from different arrays to one with the same key使用相同的键将不同数组中的值合并为一个
【发布时间】:2019-06-03 12:34:18
【问题描述】:

我有两个数组:

Array
(
    [0] => 5
    [1] => 4
)
Array
(
    [0] => BMW
    [1] => Ferrari
)

我希望得到这样的结果。合并具有相同键的值

Array  
  (  
    [0] => Array  
      (  
        [0] => 5  
        [1] => BMW 
      )  
    [1] => Array  
      (  
        [0] => 4
        [1] => Ferrari 
      )  
  )  

我怎么能这样做?是否有任何本机 PHP 功能可以做到这一点?我尝试了array_merge_recursivearray_merge,但没有得到预期的结果

【问题讨论】:

  • $new = array_map(null, ...$array);
  • 我无法将您的回答标记为问题的解决方案。但这解决了它。
  • 一定是骗子。
  • array_map 手册:“这个函数的一个有趣的用途是构造一个数组数组,这可以通过使用 NULL 作为回调函数的名称轻松执行”,参见示例 #4。

标签: php arrays merge array-merge


【解决方案1】:

至于@splash58 评论:

您可以使用array-map。举个例子:

$array = [["5", "4"], ["BMW", "Ferrari"]];
$res = array_map(null, ...$array);

现在res 将包含:

Array
(
    [0] => Array
        (
            [0] => 5
            [1] => BMW
        )
    [1] => Array
        (
            [0] => 4
            [1] => Ferrari
        )
)

如果你可以使用 2 个不同 var 中的数组:

$res= array_map(null, ["5", "4"], ["BMW", "Ferrari"]);

【讨论】:

  • OP 有两个数组,为什么要打包它们然后用 splat 解包呢?
  • 我引用了 splash58。还添加使用 2 个数组的方法
【解决方案2】:
<?php
$a = array();
$a[0] = '5';
$a[1] = '4';

$b = array();
$b[0] = 'BMW';
$b[1] = 'Ferrari';

merge_by_key($a, $b);

function merge_by_key($a, $b){
    $c = array();
    fill_array($c,$a);
    fill_array($c,$b);
    print_r($c);
}

function fill_array(&$c, $a) {
    foreach ($a as $key => $value){
        if(isset($c[$key])) {
            array_push($c[$key], $value);
        } else {
            $c[$key] = array($value);
        }
    }
}

输出:

Array
(
    [0] => Array
        (
            [0] => 5
            [1] => BMW
        )

    [1] => Array
        (
            [0] => 4
            [1] => Ferrari
        )

)

【讨论】:

    【解决方案3】:

    您可以使用 array_map 和 null 作为第一个参数(手册中有一个示例),以获得您想要的结果:

    <?php
    
    $nums = [0 => 5, 1 => 4];
    $cars = [0 => 'BMW', 1 => 'Ferrari'];
    
    var_export(array_map(null, $nums, $cars));
    

    输出:

    array (
    0 => 
    array (
        0 => 5,
        1 => 'BMW',
    ),
    1 => 
    array (
        0 => 4,
        1 => 'Ferrari',
    ),
    )
    

    请注意,以下输入会给出相同的结果:

    $nums = ['puff' => 5, 'powder' => 4];
    $cars = ['powder' => 'BMW', 'puff' => 'Ferrari'];
    

    当使用上面的 array_map 时,决定结果中的配对的是顺序,而不是键。

    使用 foreach 按键关联(注意 $cars 的顺序):

    <?php
    $nums = [0 => 5, 1 => 4];
    $cars = [1 => 'Ferrari', 0 => 'BMW'];
    foreach($nums as $k => $num)
        $result[] = [$num, $cars[$k]];
    
    var_export($result);
    

    也会产生所需的输出。

    【讨论】:

      猜你喜欢
      • 2021-12-01
      • 1970-01-01
      • 2020-04-17
      • 1970-01-01
      • 2021-10-23
      • 1970-01-01
      • 1970-01-01
      • 2018-09-02
      • 2014-03-12
      相关资源
      最近更新 更多