Php 多维数组中特定键的数组差异
我有两个产品阵列,它们的格式完全相同,如下所示:Php 多维数组中特定键的数组差异,php,arrays,comparison,multidimensional-array,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_i
$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返回第二个数组中未找到的产品的列表
我只关心在第二个数组中找不到的那些,而不关心在第一个数组中添加的其他数组,因此数组diff似乎不起作用。我怀疑您想要类似的东西。这允许您指定如何使用回调函数比较这两个数组。您只需创建一个基于产品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"));
?>
一个简单的foreach循环就足够了:
<?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
)
);
$diff = array();
// Loop through all elements of the first array
foreach($products2 as $value)
{
// Loop through all elements of the second loop
// If any matches to the current element are found,
// they skip that element
foreach($products as $value2)
{
if($value['product_id'] == $value2['product_id'])
continue 2;
}
// If no matches were found, append it to $diff
$diff[] = $value;
}
希望这有帮助 添加到第一个中的附加与第二个中未找到的之间的功能区别是什么?发布的解决方案中有一个是您想要的,还是您在寻找其他解决方案?应特别注意,以确保您比较具有相同结构的阵列。将
$b['productID']
与$a['product\u id']
进行比较将失败。
<?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
)
);
$diff = array();
// Loop through all elements of the first array
foreach($products2 as $value)
{
// Loop through all elements of the second loop
// If any matches to the current element are found,
// they skip that element
foreach($products as $value2)
{
if($value['product_id'] == $value2['product_id'])
continue 2;
}
// If no matches were found, append it to $diff
$diff[] = $value;
}
array (
0 =>
array (
'product_id' => 49,
'variation_id' => 0,
'product_price' => 600,
),
)