2012-05-25 55 views
0

我想比较下面的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) 
+1

的输出是什么? – AlphaMale

+0

添加了输出。 –

+0

也添加了你想要的输出。意味着你想要的输出是什么? – AlphaMale

回答

1

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

+0

它返回了一些错误的结果,我的意思是它返回的几列不是不同的前缀:“no_of_employees”,“annual_revenue”,“created_by” “CREATED_TIME”。此键的值完全相同。为什么会这样? –

+0

看起来你的一些键正在使用空格,有些使用下划线。 –

+0

尝试复制上面的代码...没有下划线。它也返回错误的结果。 –

1

你错误地理解它。

array_diff文档页面说

返回包含所有从ARRAY1不在 存在于任何其他阵列的条目的阵列。

Amit Patil存在于第二阵列因此它返回只有一个值,它是在SAM和它只有一个值,它不存在于第二阵列。

+0

Shakti,谢谢你的解释,现在我明白了addta_diff()和array_diff_assoc()之间的差异 –

1

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

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

这样它会工作。

1

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

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

您应该为此使用“array_diff_assoc”。

1

试试这个,看看,这应该工作

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