我需要确定
$fields
数组中的元素在我的 $answer
数组的相同位置元素中没有相同的值。
$fields = array(
'1x1' => 'k', // first element
'1x2' => 'B', // second element
'1x3' => 'c', // third element
'2x1' => 'd', // fourth element
'2x2' => 'x', // fifth element
'2x3' => 'Y', // sixth element
'3x1' => 'b', // seventh element
'3x2' => 'e', // eighth element
'3x3' => 'f' // ninth element
);
$answer = array(
'a', // first element
'b', // second element
'c', // third element
'd', // fourth element
'x', // fifth element
'y', // sixth element
'z', // seventh element
'e', // eighth element
'f' // ninth element
);
print_r(array_diff($fields, $answer));
目前结果:
(
[1x1] => k
[1x2] => B
[2x3] => Y
)
想要的结果:
(
[1x1] => k // first elements value differs
[1x2] => B // second element value differs
[2x3] => Y // sixth element value differs
[3x1] => b // seventh element value differs
)
在第七个元素中,
$answer
有z
,但$fields
有b
。 如何将 '3x1' => 'b'
包含在结果中?
array_diff()
文档:
数组 array_diff ( 数组 $array1 , 数组 $array2 [, 数组 $... ] )
将 array1 与一个或多个其他数组进行比较并返回 array1 中的值不存在于任何其他数组中。
文档中的另一个重要信息:
两个元素被认为相等当且仅当 (string) $elem1 === (字符串)$elem2。换句话说:当字符串表示相同时。
因此,在
$answers
数组中,k, B, Y
数组中没有 $fields
元素。
方法没有错,对比2个列表,都包含
b
看到您将“b”放入 $answer 和 $fields 数组中。
这就是为什么它给你这样的输出。
为了达到您想要的结果,您需要将关联键从第一个数组传输到第二个数组,然后调用
array_diff_assoc()
以便“每个元素位置”进行比较。 演示
var_export(
array_diff_assoc(
$fields,
array_combine(array_keys($fields), $answer)
)
);
输出:
'1x1' => 'k',
'1x2' => 'B',
'2x3' => 'Y',
'3x1' => 'b',
)
array_diff()
不适合此任务,因为 $answer[1] = 'b'
并且会从结果中删除 $fields['3x1'] = 'b'
,因为不考虑键,只比较值。