php - 多维数组中特定键的数组差异

标签 php arrays comparison multidimensional-array

我有两个产品数组,它们的格式完全相同,如下所示:

$products = array(
    [0] => array(
        ['product_id'] => 33
        ['variation_id'] => 0
        ['product_price'] => 500.00
    ),
    [1] => array(
        ['product_id'] => 48
        ['variation_id'] => 0
        ['product_price'] => 600.00
    ),
)

我希望能够根据产品 ID 仅返回在第二个数组中找不到的那些产品的列表。

我只关心在第二个数组中找不到的那些,而不关心添加到第一个数组中的其他数组,因此 array_diff 似乎无法解决问题。

最佳答案

我怀疑你想要类似 array_udiff 的东西.这使您可以指定如何使用回调函数比较两个数组。您只需创建一个基于产品 ID 进行比较的回调。

我认为这可以满足您的需求,因为 array_diff 系列函数仅将第一个数组与其余数组进行比较,它不会返回 array2(或 3 或 4)具有而 array1 没有的元素。

<?php
$products = array(
    0 => array(
        'product_id' => 33,
        'variation_id' => 0,
        'product_price' => 500.00
    ),
    1 => array(
        'product_id' => 48,
        'variation_id' => 0,
        'product_price' => 600.00
    )
);

$products2 = array(
    1 => array(
        'product_id' => 48,
        'variation_id' => 0,
        'product_price' => 600.00
    ),
    2 => array(
        'product_id' => 49,
        'variation_id' => 0,
        'product_price' => 600.00
    )
);

function compare_ids($a, $b)
{
  return $b['product_id'] - $a['product_id'];
}

var_dump(array_udiff($products, $products2, "compare_ids"));
?>

输出:

array(1) {
  [0]=>
  array(3) {
    ["product_id"]=>
    int(33)
    ["variation_id"]=>
    int(0)
    ["product_price"]=>
    float(500)
  }
}

关于php - 多维数组中特定键的数组差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3505922/

相关文章:

arrays - 包含打开文件路径引用的数组

java - 如何通过匹配内部数组中的值来对 arraylist 中的数组进行分组?

c++ - 如何在 C++ 中创建一个二维数组,其中一部分包含循环计数器,另一部分包含数字列表?

r - 为什么 TRUE == "TRUE"在 R 中是 TRUE?

javascript - 使用一元加号 (+) 比较日期是否相等

C 比较 'x < 0' 其中 'x' 的类型是任意的,即可能是无符号的

php - php future 版本的未定义常量文件

php - Magento - 获取当前产品

javascript - 如何知道哪个图像被点击

php - 在哪里学习 Yii?