PHP 4.0 Bug #8794 Updated: preg_grep changed behavior by design?

From: Date: Thu, 08 Mar 2001 15:22:37 +0000
Subject: PHP 4.0 Bug #8794 Updated: preg_grep changed behavior by design?
Groups: php.dev 
Request: Send a blank email to php-dev+get-48266@lists.php.net to get a copy of this message
ID: 8794 Updated by: stas Reported By: instigator@openave.com Old-Status: Open Status: Closed Bug Type: PCRE related Assigned To: Comments: Manual says that the behaviour of preg_grep is exaclty what it is. You can use each() or foreach() to go through the array, count() is not sacred in any way (and also is slower and error-prone, since nobody warrants you that array elements are in sequential order). Previous Comments: --------------------------------------------------------------------------- [2001-01-19 11:35:15] instigator@openave.com The behavior is inconsistent with expectations and breaks code. In the example given count() returns 1, so loops attempting to access found elements won't work. preg_grep() now determines and then discards indexes, forcing the caller to reconstruct 'valid' indexes (using the count() of the original array and comparisons to ""). If this is the preferred approach I suggest returning an array of indexes, not a half baked array of strings. --------------------------------------------------------------------------- [2001-01-19 09:01:51] andrei@php.net Yes, preg_grep() was always supposed to return the results with their original keys but it wasn't until the behavior was fixed a little while ago. --------------------------------------------------------------------------- [2001-01-18 20:27:48] instigator@openave.com <?php # The behavior of preg_grep() changed, seems to be broken. # Don't know if it is a preg_grep() change or a Zend hash change. # Indexing bug is my guess, or RedHat 7.0. # Or maybe by design (see NEWS) # Here is a test case for reproduction. # Set up an array of strings. $a = array( "foo", "bar", "baz" ); # Display them all first, FYI. for( $bug = 0; $bug < count( $a ); $bug++ ) { echo "test: ".$a[$bug]."<br>"; } # This works as expected, [0] is result, [1] is whatever. $b = preg_grep( "/^foo/", $a ); echo "try to find foo as [0]: ".$b[0]." count=".count( $b )."<br>"; echo "try to find foo as [1]: ".$b[1]." count=".count( $b )."<br>"; # This fails as unexpected, [0] is whatever, [1] is result???? $b = preg_grep( "/^bar/", $a ); echo "try to find bar as [0]: ".$b[0]." count=".count( $b )."<br>"; echo "try to find bar as [1]: ".$b[1]." count=".count( $b )."<br>"; ?> --------------------------------------------------------------------------- ATTENTION! Do NOT reply to this email! To reply, use the web interface found at http://bugs.php.net/?id=8794&edit=2

« previous php.dev (#48266) next »