ID:          44925
 Updated by:  [EMAIL PROTECTED]
 Reported By: admin at ifyouwantblood dot de
-Status:      Open
+Status:      Bogus
 Bug Type:    PCRE related
 PHP Version: 5.2.6
 New Comment:

> this is a follow up on bug #44191. that was fixed, but everything >
inside
> the array is now converted to a string. as i understand it, the
search
> array shouldn't change at all, so i think this is a bug. please note
> that with objects without a __toString() method, this of course leads
to
> a fatal error.

This is expected, the function is for matching strings.

> another thing is, preg_grep issues a warning if you give it an
object
> instead of converting the object to an array (like other function
like
> array_flip() do)

Exactly, preg_grep() is intended for works only with arrays.

> addtionally a question: how should preg_grep react on multi-
> dimensional
> arrays anyways? convert them to a string and try to match the
pattern?
> go through every level and return a multi-dimensional array? issue a
> warning?

The PHP converts for the literal string 'Array'.
That can be viewed with: var_dump(preg_grep('//', array(array())));



Thanks.


Previous Comments:
------------------------------------------------------------------------

[2008-05-06 09:49:09] admin at ifyouwantblood dot de

Description:
------------
this is a follow up on bug #44191. that was fixed, but everything
inside the array is now converted to a string. as i understand it, the
search array shouldn't change at all, so i think this is a bug. please
note that with objects without a __toString() method, this of course
leads to a fatal error.

another thing is, preg_grep issues a warning if you give it an object
instead of converting the object to an array (like other function like
array_flip() do)

addtionally a question: how should preg_grep react on multi-dimensional
arrays anyways? convert them to a string and try to match the pattern?
go through every level and return a multi-dimensional array? issue a
warning?

Reproduce code:
---------------
$array=Array("1",2,3,1.1,FALSE,NULL,Array());

var_dump($array); echo "<br>\n";

var_dump(preg_grep('/asdf/',$array)); echo "<br>\n";

var_dump($array); echo "<br>\n";

var_dump(preg_grep('/asdf/',new stdClass)); echo "<br>\n";

Expected result:
----------------
array(8) { [0]=> string(1) "1" [1]=> int(2) [2]=> int(3) [3]=>
float(1.1) [4]=> bool(false) [5]=> NULL [6]=> array(0) { } [7]=>
object(stdClass)#8 (0) { } } 

array(0) { }

array(8) { [0]=> string(1) "1" [1]=> int(2) [2]=> int(3) [3]=>
float(1.1) [4]=> bool(false) [5]=> NULL [6]=> array(0) { } }  

array(0) { }

Actual result:
--------------
array(7) { [0]=> string(1) "1" [1]=> int(2) [2]=> int(3) [3]=>
float(1.1) [4]=> bool(false) [5]=> NULL [6]=> array(0) { } } 

Notice: Array to string conversion in D:\_projects\preg_grep.php

array(0) { } 

array(7) { [0]=> string(1) "1" [1]=> string(1) "2" [2]=> string(1) "3"
[3]=> string(3) "1.1" [4]=> string(0) "" [5]=> string(0) "" [6]=>
string(5) "Array" }

Warning: preg_grep() expects parameter 2 to be array, object given in
D:\_projects\cms\admin\data\classes\class.article.php on line 13
NULL 




------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=44925&edit=1

Reply via email to