PHP比较两个多维数组和简单数组
我有两个数组PHP比较两个多维数组和简单数组,php,arrays,multidimensional-array,compare,Php,Arrays,Multidimensional Array,Compare,我有两个数组 $matchingskusarr = Array( 0 => Array(1235 => 171), 1 => Array(1235 => 172),2 => Array(180 => 200),3 => Array(180 => 807),4 => Array(125 => 200),5 => Array(131 => 200)) ; $ordersku=array(0=>807,1=>200,2=>171
$matchingskusarr = Array( 0 => Array(1235 => 171), 1 => Array(1235 => 172),2 => Array(180 => 200),3 => Array(180 => 807),4 => Array(125 => 200),5 => Array(131 => 200)) ;
$ordersku=array(0=>807,1=>200,2=>171,3=>172)
**我的函数没有返回正确的结果
结果应该是**
Array(1235 => Array(0 => 171,1 => 172),180 => Array(0 => 803,1 => 200);
如果我正确理解你想要实现的目标,这可能对你有用。 请注意,如果在
$matchingskuarr
中发现两个值,则这些值可能会在输出中重复,例如200。为了避免这种情况(您想吗?),您需要在另一个变量中存储唯一值的索引
$matchingskusarr = Array( 0 => Array(1235 => 171), 1 => Array(1235 => 172),2 => Array(180 => 200),3 => Array(180 => 807),4 => Array(125 => 200),5 => Array(131 => 200)) ;
$ordersku = array(0=>807, 1=>200,2=>171,3=>172);
$columns = [];
$uniqueSku = [];
foreach ($matchingskusarr as $array) {
foreach ($array as $key => $value) {
// Check for duplicity.
if (in_array($value, $uniqueSku)) {
continue;
}
// If the $value is contained in $ordersku, save it for output.
if (in_array($value, $ordersku)) {
// Initialize the array.
if (!isset($columns[$key])) {
$columns[$key] = [];
}
// Store the value found.
$columns[$key][] = $value;
$uniqueSku[] = $value;
}
}
}
print_r($columns);
输出将是:
Array
(
[1235] => Array
(
[0] => 171
[1] => 172
)
[180] => Array
(
[0] => 200
[1] => 807
)
)
您想要它们之间的差异吗?输出的基础是什么?line
foreach($key=>array$value)代码>不执行任何操作正确结果中的任何值都不应在$matchingskusarr
或$skus
数组中。@它将$key
设置为$array
中的最后一个键,对吗?(似乎与上面的注释正好相反。)感谢jirka提供的代码,您的代码是正确的,但我需要的是$ordersku中的值是否存在$matchingskusarr,并且具有相同的键,如Array(1235=>Array(0=>171,1=>172),180=>Array(0=>200,1=>807));else数组(125=>Array(0=>200),131=>Array(0=>200));如果您能提供帮助,我们将不胜感激,谢谢jirkaYeah,我真的不明白您的意思,但让我假设您不希望输出中出现重复值-例如200。我添加了一个简单的双重性检查,请参阅更新的答案。请注意,将值存储到另一个数组并进行查找将增加内存使用率。所以,如果您希望处理数千个或更多的值,我建议您找到更有效的方法。
Array
(
[1235] => Array
(
[0] => 171
[1] => 172
)
[180] => Array
(
[0] => 200
[1] => 807
)
)