PHP比较2个数组

时间:2015-04-13 18:29:40

标签: php arrays

我遇到了一些问题,我有两个阵列是其他一些方法的输出:

$firstArray = ['Johny Mao'=>'A', 'Kate Young'=>'B', 'Adam Mink'=>'C'];
$secondArray = [
    ['Johny Mao','A'],
    ['Kate Young', 'B'],
    ['Adam Mink', 'C']    
];

我应该如何更改这两个数组,以便比较它们? 我需要知道他们是否包含相同的信息。 可能我应该使用array_diff方法,但首先我需要更改数组结构以便能够比较它们。 希望明确表示:)

3 个答案:

答案 0 :(得分:3)

创建一个新数组(或修改第二个数组)到与第一个数组匹配的键/值对

$newArray = array_combine(
    array_column($secondArray, 0),
    array_column($secondArray, 1)
);

然后进行比较

答案 1 :(得分:0)

你可以这样做,假设你不需要检查第一个数组中的元素是否不在第二个数组中。

function areArraysEqual($firstArray, $secondArray)
{
    if(count($firstArray) != count($secondArray))
    {
        return false;
    }
    foreach($secondArray as $key => $value)
    {
        if(!isset($firstArray[$value[0]]) || $firstArray[$value[0]] != $value[1])
        {
            return false;
        }
    }
    return true;
}

$firstArray = ['Johny Mao'=>'A', 'Kate Young'=>'B', 'Adam Mink'=>'C'];
$secondArray = [
    ['Johny Mao','A'],
    ['Kate Young', 'B'],
    ['Adam Mink', 'C']    
];
$result = areArraysEqual($firstArray, $secondArray);
var_dump($result);

编辑:

下面的代码现在应该考虑第一个数组中的元素是否不在第二个数组中。

<?php
function isValueIn2dArray(&$array, $secondDimensionKey, $value)
{
    foreach($array as $key => $array2)
    {
        if($array2[$secondDimensionKey] == $value)
        {
            return true;
        }
    }
    return false;
}
function areArraysEqual($firstArray, $secondArray)
{
    if(count($firstArray) != count($secondArray))
    {
        return false;
    }
    foreach($secondArray as $key => $value)
    {
        if(!isset($firstArray[$value[0]]) || $firstArray[$value[0]] != $value[1])
        {
            return false;
        }
    }
    foreach($firstArray as $key => $value)
    {
        if(!isValueIn2dArray($secondArray, 0, $key))
        {
            return false;
        }
    }
    return true;
}

$firstArray = ['Johny Mao'=>'A', 'Kate Young'=>'B', 'Adam Mink'=>'C'];
$secondArray = [
    ['Johny Mao','A'],
    ['Kate Young', 'B'],
    ['Adam Mink', 'C']    
];
$result = areArraysEqual($firstArray, $secondArray);
var_dump($result);

答案 2 :(得分:0)

评论很有见。这是开发者的想法。

不使用array_diff或其他东西:

    function array_are_same($firstarray,$secondarray){
        foreach ($firstarray as $key => $value) {
            if (!array_key_exists($key, $secondarray)
                || $secondarray[$key] !== $value){
                return false;
            }
            return true;
        }
    }