PHP 4.0 Bug #8794 Updated: preg_grep changed behavior by design?
| From: | stas@php.net | 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