按值比较php中的2个数组

时间:2014-11-26 08:08:08

标签: php arrays

我有一个大问题,我不知道如何开发这个: 所以我有一张桌子:

Array(
[0] => Array
    (
        [0] => Array
            (
                [host] => test1
            )

    )

[1] => Array
    (
        [0] => Array
            (
                [host] => test2
            )

    )

  )
)

第二个表

 Array
 (
    [0] => test1
    [1] => ghfhfghfg
 )

现在我想比较这些表和retourne $ nCount = 1,因为从第一个和第二个表中有2个主机等于。

3 个答案:

答案 0 :(得分:1)

你可以这样做:

count(array_intersect(array_map(function($a) { return $a[0]['host']; }, $array1), $array2));

答案 1 :(得分:0)

首先,你必须知道你的输入是什么。在您的情况下,我假设您将始终拥有相同类型的多列"表" (正如你所说)。

对于这种情况,您可以使用类似下面的内容,将多列数组展平为平面数组,如第二个。

<?php
$multi_col = array(
    array(
        array(
            'host'=>'test1'
        )
    ),
    array(
        array(
            'host'=>'test2'
        )
    )
);

$single_col = array('test1', 'sfsd');
$single_cold_multicol = array_map(function(Array $item){
    return $item[0]['host'];
}, $multi_col);

$diff_compare = array_diff($single_col, $single_cold_multicol);
$nCount = count($single_col) - count($diff_compare);

如果您$multi_col并不总是具有相同的深度,则需要递归展平。如果它总是具有相同的深度(你总是知道如何构建数组),你可以使用上面的代码。

答案 2 :(得分:0)

如果我能帮助它,我倾向于避免硬编码数组索引。

您的第一个数组结构是否始终相同?

我会写一个会使第一个数组变平的函数,例如:

    function flatten($arr, &$acc=array()) {
        if (empty($arr)) {
            return $acc;
        }   
        $e = array_pop($arr);
        if (is_array($e)) {
            flatten($e, $acc);
        } else {
            $acc[] = $e;
        }
        return flatten($arr, $acc);
    }

这种展平方法适用于第一个数组的更一般情况。电话会是这样的:

    $ar = array(
        array(
            'test1',
        ),
        array(
            'test2',
        ),
     );

     $ar2 = array(
         'test1',
         'ghfhfghfg',
     );

     $same = array_intersect(flatten($ar), $ar2);
     var_dump($same);

您可以为flatten功能添加更多检查。