这个简单的代码有什么问题?

时间:2012-05-25 05:22:43

标签: php arrays

我想比较下面的2个数组并找出差异。键“引导所有者”和“公司”的值是不同的,但是当我比较这些数组时,它表示只有“公司”值不同。但是当我为“主人”创建2个只有一个键/值对的新数组时,它可以正常工作。我犯了一些错误吗?

<?php

$arr1 = Array
    (
        "leadid" => "418176000000069007",
        "smownerid" => "418176000000047003",
        "lead owner" => "Amit Patil",
        "company" => "SAM",
        "first name" => "Test",
        "last name" =>"Lead1",
        "designation" => "call",
        "email" => "",
        "phone" => "958",
        "fax" => "",
        "mobile" => "",
        "website" => "www.infosys.con",
        "lead source" => "Cold Call",
        "lead status" => "Contact in Future",
        "industry" => "None",
        "no of employees" => "45000",
        "annual revenue" => "0",
        "rating" => "Active",
        "smcreatorid" => "418176000000047003",
        "created by" => "Amit Patil",
        "modifiedby" => "418176000000047003",
        "modified by" => "Amit Patil",
        "created time" => "2012-04-05 19:58:00",
        "modified time" => "2012-05-02 08:51:08",
        "street" => "",
        "city" => "",
        "state" => "",
        "zip code" => "",
        "country" => "",
        "description" => "",
        "skype id" => "",
        "email opt out" => "false",
        "salutation" => "Mr.",
        "secondary email" => ""
        );

$arr2 = Array
    (
        "leadid" => "418176000000069007",
        "smownerid" => "418176000000047003",
        "lead owner" => "Amit aaa",
        "company" => "SAM A",
        "first name" => "Test",
        "last name" => "Lead1",
        "designation" => "call",
        "email" => "",
        "phone" => "958",
        "fax" => "",
        "mobile" => "",
        "website" => "www.infosys.con",
        "lead_source" => "Cold Call",
        "lead_status" => "Contact in Future",
        "industry" => "None",
        "no_of_employees" => "45000",
        "annual_revenue" => "0",
        "rating" => "Active",
        "smcreatorid" => "418176000000047003",
        "created_by" => "Amit Patil",
        "modifiedby" => "418176000000047003",
        "modified_by" => "Amit Patil",
        "created_time" => "2012-04-05 19:58:00",
        "modified_time" => "2012-05-02 08:51:08",
        "street" => "",
        "city" => "",
        "state" => "",
        "zip_code" => "0",
        "country" => "",
        "description" => "",
        "skype_id" => "",
        "email_opt_out" => "false",
        "salutation" => "Mr.",
        "secondary_email" => ""
        );

$arr3 = array("lead owner" => "Amit Patil");
$arr4 = array("lead owner" => "Amit aaa");

print_r(array_diff($arr1,$arr2));
echo "<br>";
print_r(array_diff($arr3,$arr4));
?>

输出如下

Array ( [company] => SAM )
Array ( [lead owner] => Amit Patil ) 

5 个答案:

答案 0 :(得分:1)

你错误地理解了它。

array_diff 的文档页面

  

返回一个数组,其中包含array1中未包含的所有条目   存在于任何其他阵列中。

但是Amit Patil存在于第二个数组中,因此它只返回一个值SAM,而它只是一个值,它不存在于第二个数组中。

答案 1 :(得分:1)

如果您想在关联数组之间进行区分,以使键值对很重要,而不仅仅是值,请使用array_diff_assoc,而不是array_diff

答案 2 :(得分:1)

array_diff()返回互补值。所以你可以这样做:

   array_diff(array_merge($arr1, $arr2), array_intersect($arr1, $arr2));

这样就可以了。

答案 3 :(得分:1)

之所以发生这种情况,是因为“array_diff”函数返回第一个数组中任何键所发生的值,而第二个数组中的任何键都不会发生这种情况。

lead_owner“Amit Patil”不等于第二个数组lead_owner,但等于第二个数组的created_by和modified_by键。

您应该使用“array_diff_assoc”来实现此目的。

答案 4 :(得分:1)

试试这个看看,这应该有用

print_r(array_diff_assoc($arr1,$arr2));
echo "<br>";
print_r(array_diff_assoc($arr3,$arr4));