ID: 44925 User updated by: admin at ifyouwantblood dot de Reported By: admin at ifyouwantblood dot de Status: Assigned Bug Type: PCRE related PHP Version: 5.2.6 Assigned To: nlopess New Comment:
> PHP obviously should convert the values to string to be used in > regex matching. Hence, i think that it should returns the string > that was matched. sure, internally it'll has to be converted, but i see no reason for a change of the input array. thus preg_grep should work with a copy of the input array... Previous Comments: ------------------------------------------------------------------------ [2008-05-06 13:07:09] [EMAIL PROTECTED] Well, preg_grep() != in_array()... PHP obviously should convert the values to string to be used in regex matching. Hence, i think that it should returns the string that was matched. Anyway, i'll assign to the maintainer to solve this issue. Thanks. ------------------------------------------------------------------------ [2008-05-06 12:48:29] admin at ifyouwantblood dot de >> 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. sorry, but did you even take a look at the samples? preg_grep is a SEARCH function, why should it change the INPUT array? ------------------------------------------------------------------------ [2008-05-06 10:57:14] [EMAIL PROTECTED] > 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. ------------------------------------------------------------------------ [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