Re: reverse string without strrev();

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 28/02/2008, Robert Cummings <robert@xxxxxxxxxxxxx> wrote:
>
>  On Thu, 2008-02-28 at 12:39 +0000, Nathan Rixham wrote:
>  > Aschwin Wesselius wrote:
>  > > Stut wrote:
>  > >> Just because it works doesn't mean it's right.
>  > >>
>  > >> -Stut
>  > >>
>  > >
>  > >
>  > > What I meant was that I tested the script and it worked, so I didn't
>  > > spot the flaw (wich is obvious and you were right).
>  > >
>  > > No big deal.
>  > >
>  >
>  > should it not use curlies?
>  >
>  > $tmp = '';
>  > $str = 'abcdef';
>  > for ($i = strlen($str)-1; $i >= 0; $i--) {
>  >   $tmp.= $str{$i};
>  > }
>  > echo $tmp;
>  >
>  >
>  > here's the "overkill" way to do it:
>  >
>  > $str = 'abcdef';
>  > $rev = implode(array_flip(array_reverse(array_flip(str_split($str)))));
>  > echo $rev;
>  >
>  > *sniggers*
>
>
> There's always a tradeoff between speed and memory. Here's the low
>  memory version:
>
>  <?php
>
>  $str = '1234567';
>  str_reverse_in_place( $str );
>  echo 'Reversed: '.$str."\n";
>
>  function str_reverse_in_place( &$str )
>  {
>     $a = 0;
>     $z = strlen( $str ) - 1;
>
>     while( $a < $z )
>     {
>         $t = $str[$a];
>         $str[$a] = $str[$z];
>         $str[$z] = $t;
>
>         ++$a;
>         --$z;
>     }
>  }
>
>  ?>


every byte counts :-)

function str_reverse_in_place( &$str )
{
   $a = -1;
   $z = strlen($str);

   while( ++$a < --$z )
   {
       $str[$a] = $str[$a] ^ $str[$z];
       $str[$z] = $str[$a] ^ $str[$z];
       $str[$a] = $str[$a] ^ $str[$z];
   }
}

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux