FUDforum
Fast Uncompromising Discussions. FUDforum will get your users talking.

Home » Imported messages » comp.lang.php » strpos() before str_replace()? Or, maybe strtr()?
Show: Today's Messages :: Polls :: Message Navigator
Return to the default flat view Create a new topic Submit Reply
Re: strpos() before str_replace()? Or, maybe strtr()? [message #184921 is a reply to message #184918] Sun, 16 February 2014 14:10 Go to previous messageGo to previous message
Thomas 'PointedEars'  is currently offline  Thomas 'PointedEars'
Messages: 701
Registered: October 2010
Karma:
Senior Member
Jason C wrote:

> I know that I'm talking about microseconds here, so this is really just
> for the sake of furthering my own education.
>
> I'm looping through roughly 100,000 values:
>
> $userArr = array(
> "something" => "anything",
> ...
> );
>
> foreach ($userArr as $key => $val) {
> $firstname = str_replace($key, "****", $firstname);
> $lastname = str_replace($key, "****", $lastname);
> }
>
> Both $firstname AND $lastname could contain any of the keys, but could
> only potentially contain one key each. It's likely, though, that neither
> will contain any of the keys.

I do not see the point of this code. Assuming complete code, $firstname and
$lastname are NULL in the first loop (issuing a notice each), therefore ''
in subsequent loops (str_replace() returns that when the “haystack” is
NULL). Even if they were not, what sense does it make to replace parts of
names, that match array keys, with “****”?

> Would it be faster to use strpos() before each str_replace(), like so?:
>
> foreach ($userArr as $key => $val) {
> if (strpos($firstname, $key) !== false)
> $firstname = str_replace($key, "****", $firstname);
>
> if (strpos($lastname, $key) !== false)
> $lastname = str_replace($key, "****", $lastname);
> }

Most certainly not.

> My instinct is that it would be the same,

Why do you think doing something twice would be as fast as doing it only
once?

> if not marginally slower;

It would obviously be slower, already because str_replace() has to search
for the substring before it can replace it. Even if str_pos() somehow
stored the position of the first occurrence of the substring, and
str_replace() would use that, a) it would still take additional time to
access that stored value and b) it would still be possible that there is
more than one occurrence of the substring in the string to be searched,
which str_pos() could not have stored.

> allowing a potential computation time for 100,002 strpos() as opposed to
> 100,000 str_replace().

Your logic is flawed: The worst case scenario is that *both* functions are
called.

> Or, would strtr() be faster? I've never actually used this function in
> practice; I think it's a slow function, but have never tested it, and
> don't remember where I read that:
>
> $firstname = strtr($firstname, $userArr);
> $lastname = strtr($lastname, $userArr);

It is possible that strtr() when called with a second array parameter could
be faster than str_replace(), but by contrast to str_replace() it has no way
of limiting the number of replacements. Also, str_replace() supports array
parameters both for “search” and “replace” as well.

<http://php.net/strtr>
<http://php.net/str_replace>

> Any other suggestions on what might be the fastest option?

Perhaps, if I could see the point of your code.


PointedEars
--
Anyone who slaps a 'this page is best viewed with Browser X' label on
a Web page appears to be yearning for the bad old days, before the Web,
when you had very little chance of reading a document written on another
computer, another word processor, or another network. -- Tim Berners-Lee
[Message index]
 
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Previous Topic: getting php mail error info
Next Topic: Declaring an array necessary?
Goto Forum:
  

-=] Back to Top [=-
[ Syndicate this forum (XML) ] [ RSS ]

Current Time: Fri Oct 18 14:20:57 GMT 2024

Total time taken to generate the page: 0.04286 seconds