【问题标题】:PHP - Merge 2 arrays of object using a key/idPHP - 使用键/ID 合并 2 个对象数组
【发布时间】:2015-05-08 10:05:05
【问题描述】:

我想根据 Array1 的 'id' 字段和 Array2 的 'itemVendorCode' 合并 2 个对象数组。我还想从生成的对象数组中删除任何不匹配的内容。

数组1:

Array
(
    [0] => stdClass Object
        (
            [id] => 10-423-1176
            [qty] => 2
            [price] => 12.6
        )

    [1] => stdClass Object
        (
            [id] => 89-575-2354
            [qty] => 24
            [price] => 230.35
        )

    [2] => stdClass Object
        (
            [id] => 89-605-1250
            [qty] => 2
            [price] => 230.35
        )
  )

数组2:

Array
(
    [0] => Item Object
        (
            [internalId] => 14062
            [itemVendorCode] => 89-605-1250
        )

    [1] => Item Object
        (
            [internalId] => 33806
            [itemVendorCode] => 89-575-2354
        )

    [2] => Item Object
        (
            [internalId] => 64126
            [itemVendorCode] => 26-295-1006
        )
)

【问题讨论】:

  • 你尝试过什么吗?还是您只想让我们编写您的代码?
  • 你能显示任何你想要的示例输出吗?
  • @Rizier123,我确实尝试过并且正在寻找更好的答案。如果我没有尝试过任何东西,我不会在这里问。我不是要你给我写整个代码。
  • @RaheelKhan,谢谢。我刚刚发布了一个解决方案,包括所需的输出。如果您有更有效的解决方法,请发布它,我很乐意单击“检查”图标。 ;) 再次感谢。

标签: php arrays merge array-merge


【解决方案1】:

我可以通过这段代码解决这个问题:

$indexed = array();

foreach($itemsArray as $value) {
    $indexed[$value->itemVendorCode] = $value;
}


$results = array();

foreach($vendorItems as $obj) {
    $value = $indexed[$obj->id];

    if (isset($value)) {
        foreach($value as $name => $val) {
            $obj->$name = $val; 
            array_push($results, $obj);
        }
    }

}

print_r($results);

归功于原始海报。我只是稍微修改了一下,

我能够得到这样的结果:

Array
(
    [0] => stdClass Object
        (
            [id] => 10-423-1176
            [qty] => 2
            [price] => 12.6
            [internalId] => 2035
            [itemVendorCode] => 10-423-1176
        )

    [1] => stdClass Object
        (
            [id] => 10-423-1176
            [qty] => 2
            [price] => 12.6
            [internalId] => 2035
            [itemVendorCode] => 10-423-1176
        )

    [2] => stdClass Object
        (
            [id] => 14-102-1010
            [qty] => 16
            [price] => 3.2
            [internalId] => 57033
            [itemVendorCode] => 14-102-1010
        )
)

【讨论】:

    【解决方案2】:

    我认为你将不得不使用 array_map 函数,它为你提供了一个回调函数来在数组上执行。

    在回调函数中: - 声明你的array1 - foreach 第二个数组 - 设置if语句检查id值的当前迭代是否匹配array2的itemVendorCode并返回

    类似这样的:

    // You have to specify to PHP to use a local copy of your $array2 to works with it into your callback
    $cb = function ($obj1) use ($array2)
    {
        // you foreach this array
        foreach ($array2 as $obj2) {
            // if the value of id matches itemVendorCode
            if ($obj1->id === $obj2->itemVendorCode) {
                // you return the id
                return $obj->id;
            }
        }
    };
    
    // this function will fill a new array with all returned data
    $mergedArray = array_map($cb, $array1);
    

    此代码是一个示例,但没有为您提供针刺解决方案,请尝试更新它以执行您真正想要的;)

    【讨论】:

      猜你喜欢
      • 2021-09-07
      • 2011-11-01
      • 2022-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-26
      相关资源
      最近更新 更多