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
        )
)