Doc #77487 [Nab]: array_diff_assoc
| From: | requinix@php.net | Date: | Fri, 18 Jan 2019 21:39:11 +0000 |
| Subject: | Doc #77487 [Nab]: array_diff_assoc | ||
| References: | 1 | Groups: | php.doc.bugs |
| Request: | Send a blank email to doc-bugs+get-16347@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=77487&edit=1
ID: 77487
Updated by: requinix@php.net
Reported by: felipegryllo at gmail dot com
Summary: array_diff_assoc
Status: Not a bug
Type: Documentation Problem
Package: *General Issues
PHP Version: 5.6.40
Block user comment: N
Private report: N
New Comment:
Why are you ignoring the "(string)" in the description?
(string)$elem1 means to cast the value of $elem1 to a string.
(string)$elem2 means to cast the value of $elem2 to a string.
=== means to perform a strict comparison between the left and right values.
So (string)$elem1 === (string)$elem2 means to perform a strict comparison between the left, which is
the value of $elem1 cast to a string, and the right, which is the value of $elem2 cast to a string.
If $elem1 is 2 and $elem2 is "2" then
(string)$elem1 === (string)$elem2
is the same as
(string)2 === (string)"2"
is the same as
"2" === "2"
which is true.
array_diff_assoc will compare the values in multiple arrays according to their keys, and return the
ones in the first array that are not present in the other arrays. Since the comparison was true for
$array1's 2=>2 entry, array_diff_assoc considers that the value 2 was present in the second
array and so it will not include it in the return value.
So no, it should not return 2.
I don't know if I can explain this any better.
Previous Comments:
------------------------------------------------------------------------
[2019-01-18 21:27:52] felipegryllo at gmail dot com
So, the array_diff_assoc should return 2 on this case.
Please, check this example posted on manual: http://php.net/manual/en/function.array-diff-assoc.php
See:
<?php
$array1 = array(0, 1, 2);
$array2 = array("00", "01", "2");
$result = array_diff_assoc($array1, $array2);
print_r($result);
?>
Return:
Array
(
[0] => 0 // (int) 0 isn't equal to (string) "00" or (string) "0"
[1] => 1 // (int) 1 isn't equal to (string) "01" or (string) "1"
)
Like (int) 2 isn't equal to (string) "2". But it isn't returned.
------------------------------------------------------------------------
[2019-01-18 21:20:01] requinix@php.net
"are considered equal only if (string) $elem1 === (string) $elem2"
------------------------------------------------------------------------
[2019-01-18 21:18:51] felipegryllo at gmail dot com
Thanks for your faster anwer. But (int) 2 is not identical to (string) 2, like description says...
<?php
$array1 = array(0, 1, 2); // Here, 2 is integer
$array2 = array("00", "01", "2"); // Here, 2 is string
$result = array_diff_assoc($array1, $array2); // So, this function should return 2
print_r($result);
?>
Like ((int) 2 === (string) 2) returned false...
See this var_dump:
var_dump($array1);
/*
* Return:
* array(3) {
* [0]=>
* int(0)
* [1]=>
* int(1)
* [2]=>
* int(2)
* }
*************************/
var_dump($array2);
/*
* Return:
* array(3) {
* [0]=>
* string(2) "00"
* [1]=>
* string(2) "01"
* [2]=>
* string(1) "2"
* }
*************************/
Thanks! ;)
------------------------------------------------------------------------
[2019-01-18 21:09:07] requinix@php.net
...or are you saying it should return the 2?
(string)2 is "2"
(string)"2" is "2"
"2" === "2" is true
------------------------------------------------------------------------
[2019-01-18 21:07:42] requinix@php.net
Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to
report
a bug at http://bugs.php.net/how-to-report.php
Now that you've read the description, read the return values section.
> Returns an array containing all the values from array1 that are not present in any of the other
> arrays.
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
https://bugs.php.net/bug.php?id=77487
--
Edit this bug report at https://bugs.php.net/bug.php?id=77487&edit=1