|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
[2011-01-12 14:27 UTC] lukas dot starecek at centrum dot cz
[2011-02-20 16:20 UTC] tbrasta at gmail dot com
[2011-02-21 23:23 UTC] lukas dot starecek at centrum dot cz
[2015-05-08 21:12 UTC] cmb@php.net
-Status: Open
+Status: Not a bug
-Assigned To:
+Assigned To: cmb
[2015-05-08 21:12 UTC] cmb@php.net
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sun Nov 02 07:00:01 2025 UTC |
Description: ------------ array_diff functions compares boolean false as identity (operator "===") and boolean true as equal (operator "==") so behaves inconsistently. It should compare all values in same way and in my opinion it should compare as equals ("==") or have argument (or another mechanism) how to set whether compare by equal or identity. As example I use array_diff_assoc but I think it will probably behave simmilary with another array realted functions (array_diff%, array_intersect%). In expected result I suppose comparing as equal (operator '=='). In example you can see, that array_diff_assoc behaves in such way that 0 or '0' or '' is not same as false, but 1 or '1' is same as true. So false is compared like '===' and true is compared like '=='. Because 0 is same as '0' and 1 is same as '1' I suppose, that this problem is only for boolean false value. Test script: --------------- $arr1 = array('a' => 0, 'b' => 1, 'c' => '0', 'd' => '1', 'e' => '', 'f' => false, 'g' => true, 'h' => 0, 'i' => 1); $arr2 = array('a' => false, 'b' => true, 'c' => false, 'd' => true, 'e' => false, 'f' => false, 'g' => true, 'h' => '0', 'i' => '1'); var_dump(array_diff_assoc($arr1, $arr2)); Expected result: ---------------- array(0) { } Actual result: -------------- array(2) { ["a"]=> int(0) ["c"]=> string(1) "0" }