array_diff() 在比较两个平面关联数组中的值时不考虑键

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

array_diff()
函数未显示正确的结果:

第一个数组:-

Array(
    [designation_id] => 1
    [name] => Y
    [fathers_name] => Z
    [mothers_name] => F
    [spouse_name] => d
    [gender] => F
    [last_achieved_degree] => 2
    [date_of_birth] => 1960-10-17
    [date_of_joining] => 1987-02-04
)

第二个数组:

Array(
    [designation_id] => 9
    [name] => M
    [fathers_name] => N
    [mothers_name] => O
    [spouse_name] => 
    [gender] => M
    [last_achieved_degree] => 1
    [date_of_birth] => 1967-11-17
    [date_of_joining] => 2016-01-01
)

输出:

Array
(
    [name] => Y
    [fathers_name] => Z
    [mothers_name] => F
    [spouse_name] => d
    [gender] => F
    [last_achieved_degree] => 2
    [date_of_birth] => 1960-10-17
    [date_of_joining] => 1987-02-04
)

designation_id
列未显示在输出结果中。 如果
designation_id
值为 1,则该索引不会显示在输出中,否则会显示。是bug还是别的什么?

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

由于你的数组是关联数组,所以你需要使用

array_diff_assoc
:-

<?php

 $a =   Array(
    'designation_id' =>1,
    'name' => 'Y',
    'fathers_name' => 'Z',
    'mothers_name' => 'F',
    'spouse_name' => 'd',
    'gender' => 'F',
    'last_achieved_degree' => 2,
    'date_of_birth' => '1960-10-17',
    'date_of_joining' => '1987-02-04'
);

$b =Array
(
    'designation_id' => 9,
    'name' => 'M',
    'fathers_name' => 'N',
    'mothers_name' => 'O',
    'spouse_name' => '',
    'gender' => 'M',
    'last_achieved_degree' => 1,
    'date_of_birth' => '1967-11-17',
    'date_of_joining' => '2016-01-01',
);

echo "<pre/>";print_r(array_diff_assoc($a,$b));

输出:- https://3v4l.org/NKbuX

查看更多描述和示例:- https://www.php.net/manual/en/function.array-diff-assoc.php

为什么

array_diff()
不起作用:- https://stackoverflow.com/a/4742438/4248328


1
投票

array_diff
计算差异而不比较密钥。在第二个数组中,您有
[last_achieved_degree] => 1
,它删除了
[designation_id] => 1

尝试一下
array_diff_assoc

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.