【问题标题】:merge two array with loop and key name用循环和键名合并两个数组
【发布时间】:2021-01-16 13:33:49
【问题描述】:

我有两个独立的数组$first_one:

Array
(
    [0] => Array
        (
            [_date] => 2019-10-16
            [_number] => 1
            [_order] => 1
            [name] => jack
            [other_ids] => Array
                (
                    [b_id] => 1253
                )

        )

    [1] => Array
        (
            [_date] => 2020-10-11
            [_number] => 2
            [_order] => 2
            [name] => joey
            [other_ids] => Array
                (
                    [b_id] => 1433
                )

        )

)

还有$second_array:

Array
(
    [0] => Array
        (
            [date] => 2019-10-16
            [number] => 1
            [order] => 1
            [name] => jack
            [last_name] => foobar
            [other_ids] => Array
                (
                    [b_id] => 1253
                )

        )

    [1] => Array
        (
            [date] => 2020-10-11
            [number] => 2
            [order] => 2
            [name] => joey
            [last_name] => foobar
            [other_ids] => Array
                (
                    [b_id] => 1433
                )

        )
    [2] => Array
        (
            [date] => 2020-10-28
            [number] => 3
            [order] => 3
            [name] => tom
            [last_name] => foobar
            [other_ids] => Array
                (
                    [b_id] => 1593
                )

        )

)

它们非常相似,但它们来自不同的 api,它们的数量和键名不同。

所以我要做的是计算$first_one 数组,如果有那么多循环通过$second_one(在这个例子中是2),如果[_number] [_order] 来自$first_one等于 (==) [number] [number] $second_one 然后从中获取一些信息(例如姓氏)并放入一个新数组中。

这样可以吗?

【问题讨论】:

  • 是的,有可能。展示您解决任务的尝试,我们不会为您编写代码。
  • 你的意思是if the [_number] [_order] from $first_one was equal (==) to [number] [order] $second_one我想你可能会这样做
  • @u_mulder 很抱歉,我通常会发布我的尝试,但在此我不知道如何开始
  • @RiggsFolly 是的,我的意思是
  • 当然,你可以尝试一下

标签: php arrays


【解决方案1】:
$arr1 = [ [ '_date' => '2019-10-16','_number' => 1,'_order' => 1,
            'name' => 'jack','other_ids' => ['b_id' => 1253]
          ],
          ['_date' => 2020-10-11,'_number' => 2,'_order' => 2,
                'name' => 'joey','other_ids' => ['b_id' => 1433]
          ]
];

$arr2 = [ [ 'date' => '2019-10-16','number' => '1','order' => '1',
        'name' => 'jack','last_name' => 'foobar','other_ids' => ['b_id' => 1253]
          ],
          [ 'date' => '2019-10-11','number' => '2','order' => '2',
        'name' => 'joey','last_name' => 'foobar','other_ids' => ['b_id' => 1433]
         ],
         [ 'date' => '2019-10-28', 'number' => '3', 'order' => '3',
        'name' => 'tom', 'last_name' => 'foobar', 'other_ids' => ['b_id' => 1593]
         ],
];

// first make second array more directly searchable
// make new array with the `number` as the key
foreach( $arr2 as $a){
    $arr2new[$a['number']] = $a;
}

foreach ($arr1 as $a) {
    if ( array_key_exists($a['_number'], $arr2new) && 
        $a['_order'] == $arr2new[$a['_order']]['order'] )  
    {
        $merged[] = ['name'=>$a['name'], 'other_ids' => $a['other_ids']];
    }
}
print_r($merged);

结果

Array
(
    [0] => Array (
            [name] => jack
            [other_ids] => Array
                (
                    [b_id] => 1253
                )
        )
    [1] => Array (
            [name] => joey
            [other_ids] => Array
                (
                    [b_id] => 1433
                )
        )
)

【讨论】:

    猜你喜欢
    • 2020-10-13
    • 2017-12-28
    • 1970-01-01
    • 2018-06-17
    • 2014-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-03
    相关资源
    最近更新 更多