【问题标题】:Merging array elements base on same key基于相同键合并数组元素
【发布时间】:2016-06-17 09:39:03
【问题描述】:

我正在寻找基于具有公共键的元素的 2 个数组之间的键值进行“合并”的最佳解决方案。

输入:

Array1 => [{"id" : "1", "LastName":"Jackson"}, {"id" : "2", "LastName":"Bross"} ]

Array2 =>[{"id" : "1", "FirstName":"Mickael"},{"id" : "2", "FirstName":"Mario"} ]

输出:

[{"id" : "1", "FirstName":"Mickael", "LastName":"Jackson"},
{"id" : "2", "FirstName":"Mario", "LastName":"Bross"} ]

感谢您的帮助。

【问题讨论】:

  • 请包含您迄今为止所做的任何尝试的代码
  • 我最终使用了一些使用键来合并的东西,就像 David Jawphan 建议的那样。非常感谢。

标签: php json merge


【解决方案1】:

我认为内部数据是对象,因此我们可以使用 foreach,如果 id 匹配,则按 object->key = value 格式分配对象数据

foreach ($array1 as $key => $value) {
    foreach ($array2 as $k => $v) {
        if($value->id == $v->id){
            $array1[$key]->FirstName = $v->FirstName;
        }
    }
}
var_dump($array1);

//输出

array (size=2)
  0 => 
    object(stdClass)[1]
      public 'id' => string '1' (length=1)
      public 'LastName' => string 'Jackson' (length=7)
      public 'FirstName' => string 'Mickael' (length=7)
  1 => 
    object(stdClass)[2]
      public 'id' => string '2' (length=1)
      public 'LastName' => string 'Bross' (length=5)
      public 'FirstName' => string 'Mario' (length=5)

【讨论】:

    【解决方案2】:

    请注意,要做到这一点,您的姓氏和名字数组中的元素数量必须相同:

    $lastNames = array(
        array(
            'id' => 1,
            'lastName' => 'Kent'
        ),
        array(
            'id' => 2,
            'lastName' => 'Snow'
        ),
        array(
            'id' => 3,
            'lastName' => 'Parker'
        ),
    );
    $firstNames = array(
        array(
            'id' => 1,
            'firstName' => 'Clark'
        ),
        array(
            'id' => 2,
            'firstName' => 'John'
        ),
        array(
            'id' => 3,
            'firstName' => 'Peter'
        ),
    );
    
    $people = array();
    foreach($firstNames as $key => $data) {
        $people[] = array(
            'id' => $data['id'],
            'FirstName' => $data['firstName'],
            'LastName' => $lastNames[$key]['lastName']
        );
    }
    
    print_r($people);
    

    输出:

    Array
    (
        [0] => Array
            (
                [id] => 1
                [FirstName] => Clark
                [LastName] => Kent
            )
    
        [1] => Array
            (
                [id] => 2
                [FirstName] => John
                [LastName] => Snow
            )
    
        [2] => Array
            (
                [id] => 3
                [FirstName] => Peter
                [LastName] => Parker
            )
    
    )
    

    【讨论】:

      猜你喜欢
      • 2021-12-05
      • 2014-02-28
      • 2021-12-09
      • 1970-01-01
      • 2015-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-31
      相关资源
      最近更新 更多