Edit report at https://bugs.php.net/bug.php?id=38685&edit=1
ID: 38685
Comment by: jeff at lxvi dot net
Reported by: paulschreiber at gmail dot com
Summary: ER: Allow str_replace with string subject, array
replace
Status: Analyzed
Type: Feature/Change Request
Package: *General Issues
Operating System: any
PHP Version: 4.4.4
Block user comment: N
Private report: N
New Comment:
I agree with the OP. There are many possible applications for cycling through
an array of replacements for a single search string. A simple example would be
alternating colors for successive tr tags. There are all kinds of unforeseen
creative ways to utilize this feature, and it should not be necessary to supply
you with an exhaustive list along with a doctoral dissertation.
Previous Comments:
------------------------------------------------------------------------
[2013-03-17 16:44:57] paulschreiber at gmail dot com
1. When this bug was written, PDO and other similar libraries did not exist.
2. Prepared statements are only one possible use case.
3. If you are not going to fix this bug, just close it as WONTFIX.
------------------------------------------------------------------------
[2013-03-17 16:13:34] [email protected]
It is a feature request, not a bug, and one that is rather iffy as far as I am
concerned. It is likely to sit here another 7 years unless accompanied by a
solid
implementation and some better rationale on why we should encourage people to
use
something like this over the native prepare/execute syntax provided by the
databases or even the emulated prepare/execute we provide via PDO.
------------------------------------------------------------------------
[2013-03-17 03:57:58] valentiny510 at yahoo dot es
For Paul: The syntax is incorrect.
For PHP Team: 7 years and is still open ???
------------------------------------------------------------------------
[2006-09-01 22:46:52] paulschreiber at gmail dot com
Description:
------------
The PHP docs for str_replace say:
"If search and replace are arrays, then str_replace() takes a value from each
array and uses them to do search and replace on subject. If replace has fewer
values than search, then an empty string is used for the rest of replacement
values. If search is an array and replace is a string, then this replacement
string is used for every value of search. The converse would not make sense,
though."
I think the converse makes sense in some cases. Here is an example:
$result = str_replace("?", array("Joe", "Smith"), "SELECT * FROM people WHERE
first = ? AND last = ?");
(Yes, if you were doing real database work, you'd need to escape everything.)
It would be nice if PHP supported this.
Reproduce code:
---------------
$result = str_replace("?", array("'Joe'", "'Smith'"), "SELECT * FROM people
WHERE first = ? AND last = ?");
print $result;
Expected result:
----------------
SELECT * FROM people WHERE first = 'Joe' AND last = 'Smith'
Actual result:
--------------
PHP Notice: Array to string conversion in /Users/paul/- on line 2
Notice: Array to string conversion in /Users/paul/- on line 2
SELECT * FROM people WHERE first = Array AND last = Array
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=38685&edit=1