Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.php > #12855

Re: strpos() before str_replace()? Or, maybe strtr()?

From Denis McMahon <denismfmcmahon@gmail.com>
Newsgroups comp.lang.php
Subject Re: strpos() before str_replace()? Or, maybe strtr()?
Date 2014-02-17 01:44 +0000
Organization A noiseless patient Spider
Message-ID <ldrphe$4l4$2@dont-email.me> (permalink)
References <cd42c387-7d7c-43de-bb0f-e12134d6ece2@googlegroups.com> <ldqk9j$c19$1@dont-email.me> <0.1ee34674e35175ac7e49.20140216192157GMT.87d2im7tii.fsf@bsb.me.uk> <0.157e1f73edc557692509.20140216205352GMT.87mwhq6aov.fsf@bsb.me.uk>

Show all headers | View raw


On Sun, 16 Feb 2014 20:53:52 +0000, Ben Bacarisse wrote:

> Ben Bacarisse <ben.usenet@bsb.me.uk> writes:
> 
>> Norman Peelman <npeelman@cfl.rr.com> writes:
>>
>>> On 02/16/2014 04:49 AM, Jason C wrote:
>> <snip>
>>>> 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);
>>>> }
>>>
>>>
>>>   It's slower because you are actually performing the same function
>>> twice on each iteration.
>>
>> Did you try it?  In my tests it's faster (37ms vs 66ms).  This may be
>> because of the assignment always being done.
> 
> I'm pretty sure that it is simply the overhead of str_replace compared
> to that of strpos, and not to do with the assignment.
> 
> <snip>

Not sure whether something like this could be faster or not:

  foreach ( $userArr as $key => $val ) {

    if ( ( $f = strpos( $firstname, $key ) ) !== false )
      $firstname = substr( $firstname, 0, $f ) . "****" . 
                   substr( $firstname, $f + strlen( $key ) );

    if ( ( $l = strpos( $lastname, $key ) ) !== false )
      $lastname = substr( $lastname, 0, $l ) . "****" . 
                  substr( $lastname, $l + strlen( $key ) );

  }

As I don't have representative data to test against.

You could use a function:

  function replace_stars( $needle, $pos, $haystack ) {
    return substr( $haystack, 0, $pos ) . "****" . 
           substr( $haystack, $pos + strlen( $needle ) );
  }

  foreach ( $userArr as $key => $val ) {

    if ( ( $f = strpos( $firstname, $key ) ) !== false )
      $firstname = replace_stars( $key, $f, $firstname );

    if ( ( $l = strpos( $lastname, $key ) ) !== false )
      $lastname = replace_stars( $key, $f, $lastname );

  }

but that would be an extra function call, so I inlined the code instead.

p.s. Yes richard, I used an "=" inside an if test, but the difference is 
that I know what I'm doing when I do that, and you don't!

-- 
Denis McMahon, denismfmcmahon@gmail.com

Back to comp.lang.php | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

strpos() before str_replace()? Or, maybe strtr()? Jason C <jwcarlton@gmail.com> - 2014-02-16 01:49 -0800
  Re: strpos() before str_replace()? Or, maybe strtr()? bill <william@TechServSys.com> - 2014-02-16 07:10 -0500
  Re: strpos() before str_replace()? Or, maybe strtr()? "J.O. Aho" <user@example.net> - 2014-02-16 14:55 +0100
  Re: strpos() before str_replace()? Or, maybe strtr()? Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2014-02-16 15:10 +0100
    Re: strpos() before str_replace()? Or, maybe strtr()? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2014-02-16 20:24 +0000
      Re: strpos() before str_replace()? Or, maybe strtr()? "J.O. Aho" <user@example.net> - 2014-02-16 21:41 +0100
        Re: strpos() before str_replace()? Or, maybe strtr()? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2014-02-16 20:51 +0000
          Re: strpos() before str_replace()? Or, maybe strtr()? Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2014-02-16 22:16 +0100
            Re: strpos() before str_replace()? Or, maybe strtr()? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2014-02-16 23:13 +0000
              Re: strpos() before str_replace()? Or, maybe strtr()? Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2014-02-18 01:33 +0100
          Re: strpos() before str_replace()? Or, maybe strtr()? "J.O. Aho" <user@example.net> - 2014-02-17 06:35 +0100
            Re: strpos() before str_replace()? Or, maybe strtr()? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2014-02-17 14:14 +0000
              Re: strpos() before str_replace()? Or, maybe strtr()? "J.O. Aho" <user@example.net> - 2014-02-17 18:55 +0100
            Re: strpos() before str_replace()? Or, maybe strtr()? Christoph Michael Becker <cmbecker69@arcor.de> - 2014-02-17 19:30 +0100
  Re: strpos() before str_replace()? Or, maybe strtr()? Jerry Stuckle <jstucklex@attglobal.net> - 2014-02-16 09:15 -0500
  Re: strpos() before str_replace()? Or, maybe strtr()? Christoph Michael Becker <cmbecker69@arcor.de> - 2014-02-16 15:45 +0100
    Re: strpos() before str_replace()? Or, maybe strtr()? Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2014-02-16 17:23 +0100
      Re: strpos() before str_replace()? Or, maybe strtr()? Christoph Michael Becker <cmbecker69@arcor.de> - 2014-02-16 17:41 +0100
  Re: strpos() before str_replace()? Or, maybe strtr()? Norman Peelman <npeelman@cfl.rr.com> - 2014-02-16 10:08 -0500
    Re: strpos() before str_replace()? Or, maybe strtr()? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2014-02-16 19:21 +0000
      Re: strpos() before str_replace()? Or, maybe strtr()? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2014-02-16 20:53 +0000
        Re: strpos() before str_replace()? Or, maybe strtr()? Denis McMahon <denismfmcmahon@gmail.com> - 2014-02-17 01:44 +0000
          Re: strpos() before str_replace()? Or, maybe strtr()? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2014-02-17 02:19 +0000
      Re: strpos() before str_replace()? Or, maybe strtr()? Norman Peelman <npeelman@cfl.rr.com> - 2014-02-16 18:17 -0500
  Re: strpos() before str_replace()? Or, maybe strtr()? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2014-02-16 20:49 +0000

csiph-web