在php中使用array_diff_assoc发出问题

时间:2015-10-07 16:39:26

标签: php arrays

我在使用array_diff_assoc时遇到了问题,因为结果不对。我在$ diff中获得了键[3],但它存在于$ c1和$ c2中,所以$ diff中的结果没有意义,因为我使用{{1} }。我应该从$ c2获得key [0]以及来自$ diff的其他两个键[1]和[2]是正确的。

Query1导致此数组$ c2

array_diff_assoc()

查询2导致此数组$ c1

Array([0] => Array
        ([PROCESSO] => 1614436
         [DATAMSG] => 2015-04-27 22
         [CATEGORIA_DESC] => ECG_HR                        
         [VALOR] => 135
         [CRITICO] => 1)
    [1] => Array
        ([PROCESSO] => 1614436
         [DATAMSG] => 2015-04-27 23
         [CATEGORIA_DESC] => ECG_HR                        
         [VALOR] => 121
         [CRITICO] => 1)
    [2] => Array
        ([PROCESSO] => 1614436
         [DATAMSG] => 2015-04-27 23
         [CATEGORIA_DESC] => ECG_HR                        
         [VALOR] => 123
         [CRITICO] => 1)
    [3] => Array
        ([PROCESSO] => 1614436
         [DATAMSG] => 2015-04-27 23
         [CATEGORIA_DESC] => ECG_HR                        
         [VALOR] => 125
         [CRITICO] => 1))

然后我使用Array([0] => Array ([PROCESSO] => 1614436 [DATAMSG] => 2015-04-27 23 [CATEGORIA_DESC] => ECG_HR [VALOR] => 125 [CRITICO] => 1)) ,我在数组$ diff中获得结果。

$diff=array_diff_assoc($c2,$c1);

编辑:我尝试使用Array([1] => Array ([PROCESSO] => 1614436 [DATAMSG] => 2015-04-27 23 [CATEGORIA_DESC] => ECG_HR [VALOR] => 121 [CRITICO] => 1) [2] => Array ([PROCESSO] => 1614436 [DATAMSG] => 2015-04-27 23 [CATEGORIA_DESC] => ECG_HR [VALOR] => 123 [CRITICO] => 1) [3] => Array ([PROCESSO] => 1614436 [DATAMSG] => 2015-04-27 23 [CATEGORIA_DESC] => ECG_HR [VALOR] => 125 [CRITICO] => 1)) 和php.net示例中的以下函数,但它返回与$diff=array_udiff_assoc($c2,$c1, array("cr", "comp_func_cr"));相同的内容。

array_diff_assoc

3 个答案:

答案 0 :(得分:1)

扩展上一个答案:

function array2D_diff( $c1, $c2 )
{
    $c3 = Array();
    foreach($c2 as $key=>$v)
    {
        if(!in_array($v, $c1))
        {
            $c3[] = $v;
        }
    }

    foreach($c1 as $key=>$v)
    {
        if(!in_array($v, $c2))
        {
            $c3[] = $v;
        }
    }

    return $c3;
}

print_r(array2D_diff( $c2, $c1 ));

无论传递$ c2和$ c1的顺序如何,这都会有效。

答案 1 :(得分:1)

尝试以下

<?php
foreach($c2 as $key=>$v1){
    if(in_array($v1, $c1)){
      unset($c2[$key]);
    }
}
print_r($c2);
?>

或者您可以创建一个函数并使用它示例:

<?php
function array_defference($a1,$a2){
            if(sizeof($a1) >= sizeof($a2)){
                $large = $a1;
                $small = $a2;
            }else{
                $large = $a2;
                $small = $a1;
            }

            foreach($large as $key=>$v1){
                if(in_array($v1, $small)){
                    unset($large[$key]);
                }
            }
            return $large;

        }
        $reuslt = array_defference($c2,$c1); 
        print_r($reuslt);
?>

答案 2 :(得分:0)

array_diff_assoc(array1,array2) 将array1与array2进行比较并返回差异。与array_diff()不同,数组键也用于比较。它实际上与您的数组键进行比较,因此结果就像您的豪宅。在您的情况下,您需要使用它  array_udiff_assoc($c2,$c1)。 使用附加索引检查计算数组的差异,通过回调函数比较数据。