Bug #61118 [Nab]: array_intersect_assoc() with duplicate arrays for values gives of a notice
Edit report at https://bugs.php.net/bug.php?id=61118&edit=1
ID: 61118
Updated by: rasmus@php.net
Reported by: letharion at gmail dot com
Summary: array_intersect_assoc() with duplicate arrays for
values gives of a notice
Status: Not a bug
Type: Bug
Package: Arrays related
Operating System: Gentoo Linux
PHP Version: 5.4.0RC7
Block user comment: N
Private report: N
New Comment:
Your example in this bug is also a good illustration of why the notice is
needed. This function does't support nested arrays. It does a single-level
comparison and as such it actually gave you an unintuitive result. The
intersection is supposed to give you the values that appear in both arrays and
have the same keys. So if you compared:
['baz' => 1] and ['baz' => 2]
there are no intersecting values. However, if you nest those:
['baz' => [1] ] and ['baz' => [2] ]
Now you suddenly have a result. This is because it doesn't look at the contents
of the nested arrays, it just converts them to strings and compares them. This
would give you the same result:
['baz' => [1] ] and ['baz' => 'Array']
which is probably not what you had in mind. That's why you are getting a notice
here.
Previous Comments:
------------------------------------------------------------------------
[2012-02-17 08:52:55] letharion at gmail dot com
Thank you for pointing this out to me. Sorry about the "no-bug".
------------------------------------------------------------------------
[2012-02-17 08:37:30] nikic@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
This is expected behavior: The notice indicates incorrect usage of the function. array_intersect
does not compare the arrays but casts them to strings thus making both "Array" and issuing
a notice.
The behavior always has been like this, but the notice was added in 5.4 :)
------------------------------------------------------------------------
[2012-02-17 07:36:55] letharion at gmail dot com
Description:
------------
Gentoo package version: dev-lang/php-5.4.0_rc7-r1
Configure: ./configure --prefix=/usr --build=x86_64-pc-linux-gnu --host=x86_64-pc-linux-gnu
--mandir=/usr/share/man --infodir=/usr/share/info --datadir=/usr/share --sysconfdir=/etc
--localstatedir=/var/lib --prefix=/usr/lib64/php5.4 --mandir=/usr/lib64/php5.4/man
--infodir=/usr/lib64/php5.4/info --libdir=/usr/lib64/php5.4/lib --with-libdir=lib64 --without-pear
--disable-maintainer-zts --disable-bcmath --with-bz2 --disable-calendar --enable-ctype --with-curl
--with-curlwrappers --enable-dom --without-enchant --enable-exif --enable-fileinfo --enable-filter
--disable-ftp --with-gettext --without-gmp --enable-hash --without-mhash --with-iconv --disable-intl
--enable-ipv6 --enable-json --without-kerberos --enable-libxml --enable-mbstring --with-mcrypt
--without-mssql --with-onig=/usr --with-openssl --with-openssl-dir=/usr --disable-pcntl
--enable-phar --enable-pdo --without-pgsql --enable-posix --with-pspell --without-recode
--enable-simplexml --disable-shmop --without-snmp --disable-soap --disable-sockets --without-sqlite3
--without-sybase-ct --disable-sysvmsg --disable-sysvsem --disable-sysvshm --without-tidy
--enable-tokenizer --disable-wddx --enable-xml --disable-xmlreader --disable-xmlwriter
--without-xmlrpc --without-xsl --disable-zip --with-zlib --disable-debug --enable-dba --without-cdb
--with-db4 --disable-flatfile --with-gdbm --disable-inifile --without-qdbm --with-freetype-dir=/usr
--with-t1lib=/usr --disable-gd-jis-conv --with-jpeg-dir=/usr --with-png-dir=/usr --without-xpm-dir
--with-gd --with-ldap --without-ldap-sasl --with-mysql=mysqlnd
--with-mysql-sock=/var/run/mysqld/mysqld.sock --with-mysqli=mysqlnd --without-pdo-dblib
--with-pdo-mysql=mysqlnd --without-pdo-pgsql --without-pdo-sqlite --without-pdo-odbc --with-readline
--without-libedit --without-mm --with-pcre-regex=/usr --with-pcre-dir=/usr
--with-config-file-path=/etc/php/cli-php5.4
--with-config-file-scan-dir=/etc/php/cli-php5.4/ext-active --disable-embed --enable-cli
--disable-cgi --disable-fpm --without-apxs2
Test script:
---------------
<?php
$foo = array('baz' => Array (0 => 'X' ));
$bar = array('baz' => Array (1 => 'Y' ));
print_r(array_intersect_assoc($foo, $bar));
Expected result:
----------------
Array
(
[baz] => Array
(
[0] => X
)
)
Actual result:
--------------
PHP Notice: Array to string conversion in array_intersect_assoc_short.php on line 6
Notice: Array to string conversion in array_intersect_assoc_short.php on line 6
PHP Notice: Array to string conversion in array_intersect_assoc_short.php on line 6
Notice: Array to string conversion in array_intersect_assoc_short.php on line 6
Array
(
[baz] => Array
(
[0] => X
)
)
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=61118&edit=1
Thread (4 messages)