在PHP数组中找到相同的键值,并使用更新的值将它们保存到输出数组中

在PHP数组中找到相同的键值,并使用更新的值将它们保存到输出数组中,php,arrays,json,object,Php,Arrays,Json,Object,我想比较PHP中的两个数组,并将它们与(array_one)sku,(array_two)id进行匹配。然后将结果和更新后的价格从array_two推送到output-array 这就是我使用JS做类似事情的方式。不知道如何在PHP中实现它 array_one.forEach(product => { let matchedProducts = array_two.find(old => { return product["sku"] === old[

我想比较PHP中的两个数组,并将它们与(array_one)
sku
,(array_two)
id
进行匹配。然后将结果和更新后的价格从array_two推送到
output
-array

这就是我使用JS做类似事情的方式。不知道如何在PHP中实现它

array_one.forEach(product => {
  let matchedProducts = array_two.find(old => {
    return product["sku"] === old["id"];
  });
  if (JSON.stringify(matchedProducts) !== JSON.stringify(product)) {
    console.log(matchedProducts)
  }
});
Arrau\u one:

[
  {
    "post_id": 18,
    "sku": "SNTP-UVS8P",
    "price": "59"
  },
  {
    "post_id": 17,
    "sku": "TD-SKU30548",
    "price": "129"
  },
  {
    "post_id": 16,
    "sku": "USBCV",
    "price": ""
  }
]
[
  {
    "id": "DFTS-P20PR",
    "price": "49"
  },
  {
    "id": "SNTP-UVS8P",
    "price": "79"
  },
  {
    "id": "SNTP-UVS8P",
    "price": "49"
  },
  {
    "id": "USBCV",
    "price": "99"
  },
  {
    "id": "KS-12SEA2",
    "price": "29"
  }
]
Arrau\u二:

[
  {
    "post_id": 18,
    "sku": "SNTP-UVS8P",
    "price": "59"
  },
  {
    "post_id": 17,
    "sku": "TD-SKU30548",
    "price": "129"
  },
  {
    "post_id": 16,
    "sku": "USBCV",
    "price": ""
  }
]
[
  {
    "id": "DFTS-P20PR",
    "price": "49"
  },
  {
    "id": "SNTP-UVS8P",
    "price": "79"
  },
  {
    "id": "SNTP-UVS8P",
    "price": "49"
  },
  {
    "id": "USBCV",
    "price": "99"
  },
  {
    "id": "KS-12SEA2",
    "price": "29"
  }
]
输出

[
  {
    "post_id": 18,
    "sku": "SNTP-UVS8P",
    "price": "79" //Updated Price from Array_two
  },
  {
    "post_id": 16,
    "sku": "USBCV",
    "price": "99" //Updated Price from Array_two
  }
]

首先使用
array\u column()

它生成一个数组,其中
id
作为键,
price
作为值:

Array
(
    [DFTS-P20PR] => 49
    [SNTP-UVS8P] => 49
    [USBCV] => 99
    [KS-12SEA2] => 29
)
现在,您可以通过测试
$new\u array2[sku]
来循环array1并在new\u array2中查找新价格,并查看它是否存在

$result=[];
foreach ($array1 as $value){
  if( isset( $new_array2[ $value['sku'] ] ) ){
     ... new price found
     $result[]=[
         'post_id'=> $value['post_id'],
         'sku'    => $value['sku'],
         'price'  => $new_array2[ $value['sku'] ]
         ];
     }
  else{
     ... use old price
     }
}

我通过创建自己的find函数成功地做到了这一点

// Match Products
$result = [];
    
function find($array, $key, $id) {
    $result = [];

    foreach ($array as $product) {
        if ($product['id'] == $key) {
            $result['post_id'] = $id;
            $result['sku']     = $key;
            $result['price']   = $product['price'];
        } 
    }
    return $result;
}

foreach ($woProducts as $woProduct) {
    $matchedProduct = find($dbProducts, $woProduct['sku'], $woProduct['post_id']);
    array_push($result, $matchedProduct);
}

print_r($result);

那么,你哪里有问题?这就是解决编码问题,而不是为您编写代码。我不知道如何使用PHP。我在JS中做了类似的事情,我循环通过array\u one,然后使用
array\u two.find()
将它们“连接”在一起。