array_diff() 在比较两个平面关联数组之间的值时不尊重键[重复]

问题描述 投票:0回答:1

我有两个数组:

(
    [lineCode] => C
    [serviceRequest] => Ext, Warr auth.#19091100102 for $650.64 to be paid by c/card(fax#817-785-6700). Cust owes balance
    [skillCode] => 90SB
    [opCode] => 90SB
    [jobType] => CUSTOMER
    [techNo] => 
    [lineStatus] => C
)
(
    [id] => 755350
    [rid] => 252178
    [lineCode] => C
    [serviceRequest] => Ext, Warr auth.#19091100102 for $650.64 to be paid by c/card(fax#817-785-6700). Cust owes balance
    [skillCode] => 90SB
    [opCode] => 90SB
    [jobType] => CUSTOMER
    [techNo] => 
    [lineStatus] => W
    [timeA] => 1575497139
    [timeC] => 0
)

当我执行

$diff = array_diff($arry1, $arry2);
时,它没有发现
lineStatus
有什么不同。难道是因为服务请求行有特殊字符?虽然作为测试,我将两行都设置为空白,但仍然看不出有什么区别。

任何帮助都会很棒。迷惑了一天。

更新更多信息 由于这是通过多个数组的较大循环的一部分,因此上面这个之前的差异检查如下:

$arry1= Array
(
    [lineCode] => B
    [serviceRequest] => 
    [skillCode] => 15
    [opCode] => 15
    [jobType] => CUSTOMER
    [techNo] => A05
    [lineStatus] => C
)
$arry2= Array
(
    [id] => 755362
    [rid] => 252184
    [lineCode] => B
    [serviceRequest] => 
    [skillCode] => 15
    [opCode] => 15
    [jobType] => CUSTOMER
    [techNo] => A05
    [lineStatus] => W
    [timeA] => 1575504138
    [timeC] => 0
)
$diff= Array
(
    [lineStatus] => C
)

差异代码是

$diff=array_diff($arry1,$arry2);

如果这个方法可以正常工作,为什么下一个就不行呢?

php arrays filter associative-array array-difference
1个回答
1
投票

为什么它没有按照你最初的方式找到它......?

array_diff()
不关心键值组合,它只比较所比较的不同数组中的 values

为了更好地理解发生的情况:如果在更新的数据中将数组元素

[dummy] => "C"
引入到
$arry2
中,您将不再将
[lineStatus] => "C"
返回到
$diff
中。因为值
C
现在可以在
$arry1
$arry2
中找到。

看看这个演示

© www.soinside.com 2019 - 2025. All rights reserved.