Delicious Bookmark this on Delicious Share on Facebook SlashdotSlashdot It! Digg! Digg



PHP : Function Reference : Variable Handling Functions : strval

strval

Get string value of a variable (PHP 4, PHP 5)
string strval ( mixed var )


Related Examples ( Source code ) » strval


Code Examples / Notes » strval

redbeard

You can also use the PEAR package Numbers_Words, which handles many other languages.

kendsnyder+phpnet

The only way to convert a large float to a string is to use printf('%0.0f',$float); instead of strval($float); (php 5.1.4).
// strval() will lose digits around pow(2,45);
echo pow(2,50); // 1.1258999068426E+015
echo (string)pow(2,50); // 1.1258999068426E+015
echo strval(pow(2,50)); // 1.1258999068426E+015
// full conversion
printf('%0.0f',pow(2,50)); // 112589906846624
echo sprintf('%0.0f',pow(2,50)); // 112589906846624


steve ball

It seems that one is being treated as an unsigned large int (32 bit), and the other as a signed large int (which has rolled over/under).
2326201276 - (-1968766020) =  4294967296.


portos_ze_retour

In complement to Tom Nicholson's contribution, here is the french version (actually it's possible to change the language, but you should check the syntax ;) )
function int_to_words($x) {
  global $nwords;
  if(!is_numeric($x))
    $w = '#';
  else if(fmod($x, 1) != 0)
    $w = '#';
  else {
    if($x < 0) {
        $w = $nwords['minus'].' ';
        $x = -$x;
    } else
        $w = '';
    // ... now $x is a non-negative integer.
    if($x < 21)  // 0 to 20
        $w .= $nwords[$x];
    else if($x < 100) {  // 21 to 99
        $w .= $nwords[10 * floor($x/10)];
        $r = fmod($x, 10);
        if($r > 0)
          $w .= '-'. $nwords[$r];
    } else if($x < 1000) {  // 100 to 999
        $w .= $nwords[floor($x/100)] .' '.$nwords['hundred'];
        $r = fmod($x, 100);
        if($r > 0)
          $w .= ' '.$nwords['separator'].' '. int_to_words($r);
    } else if($x < 1000000) {  // 1000 to 999999
        $w .= int_to_words(floor($x/1000)) .' '.$nwords['thousand'];
        $r = fmod($x, 1000);
        if($r > 0) {
          $w .= ' ';
          if($r < 100)
              $w .= $nwords['separator'].' ';
          $w .= int_to_words($r);
        }
    } else {    //  millions
        $w .= int_to_words(floor($x/1000000)) .' '.$nwords['million'];
        $r = fmod($x, 1000000);
        if($r > 0) {
          $w .= ' ';
          if($r < 100)
              $word .= $nwords['separator'].' ';
          $w .= int_to_words($r);
        }
    }
  }
  return $w;
}
// Usage in English
$nwords = array( "zero", "one", "two", "three", "four", "five", "six", "seven",
                  "eight", "nine", "ten", "eleven", "twelve", "thirteen",
                  "fourteen", "fifteen", "sixteen", "seventeen", "eighteen",
                  "nineteen", "twenty", 30 => "thirty", 40 => "forty",
                  50 => "fifty", 60 => "sixty", 70 => "seventy", 80 => "eighty",
                  90 => "ninety" , "hundred" => "hundred", "thousand"=> "thousand", "million"=>"million",
                  "separator"=>"and", "minus"=>"minus");
echo 'There are currently '. int_to_words(-120223456) . ' members logged on.
';
//Utilisation en Francais
$nwords = array( "zéro", "un", "deux", "trois", "quatre", "cinq", "six", "sept",
                  "huit", "neuf", "dix", "onze", "douze", "treize",
                  "quatorze", "quinze", "seize", "dix-sept", "dix-huit",
                  "dix-neuf", "vingt", 30 => "trente", 40 => "quarante",
                  50 => "cinquante", 60 => "soixante", 70 => "soixante-dix", 80 => "quatre-vingt",
                  90 => "quatre-vingt-dix" , "hundred" => "cent", "thousand"=> "mille", "million"=>"million",
                  "separator"=>"", "minus"=>"moins");
echo 'Il y a actuellement '. int_to_words(-120223456) . ' membres connectés.
';


tom nicholson

If you want to convert an integer into an English word string, eg. 29 -> twenty-nine, then here's a function to do it.
Note on use of fmod()
 I used the floating point fmod() in preference to the % operator, because % converts the operands to int, corrupting values outside of the range [-2147483648, 2147483647]
I haven't bothered with "billion" because the word means 10e9 or 10e12 depending who you ask.
The function returns '#' if the argument does not represent a whole number.
<?php
$nwords = array( "zero", "one", "two", "three", "four", "five", "six", "seven",
                  "eight", "nine", "ten", "eleven", "twelve", "thirteen",
                  "fourteen", "fifteen", "sixteen", "seventeen", "eighteen",
                  "nineteen", "twenty", 30 => "thirty", 40 => "forty",
                  50 => "fifty", 60 => "sixty", 70 => "seventy", 80 => "eighty",
                  90 => "ninety" );
function int_to_words($x) {
  global $nwords;
  if(!is_numeric($x))
     $w = '#';
  else if(fmod($x, 1) != 0)
     $w = '#';
  else {
     if($x < 0) {
        $w = 'minus ';
        $x = -$x;
     } else
        $w = '';
     // ... now $x is a non-negative integer.
     if($x < 21)   // 0 to 20
        $w .= $nwords[$x];
     else if($x < 100) {   // 21 to 99
        $w .= $nwords[10 * floor($x/10)];
        $r = fmod($x, 10);
        if($r > 0)
           $w .= '-'. $nwords[$r];
     } else if($x < 1000) {   // 100 to 999
        $w .= $nwords[floor($x/100)] .' hundred';
        $r = fmod($x, 100);
        if($r > 0)
           $w .= ' and '. int_to_words($r);
     } else if($x < 1000000) {   // 1000 to 999999
        $w .= int_to_words(floor($x/1000)) .' thousand';
        $r = fmod($x, 1000);
        if($r > 0) {
           $w .= ' ';
           if($r < 100)
              $w .= 'and ';
           $w .= int_to_words($r);
        }
     } else {    //  millions
        $w .= int_to_words(floor($x/1000000)) .' million';
        $r = fmod($x, 1000000);
        if($r > 0) {
           $w .= ' ';
           if($r < 100)
              $word .= 'and ';
           $w .= int_to_words($r);
        }
     }
  }
  return $w;
}
?>
Usage:
<?php
echo 'There are currently '. int_to_words($count) . ' members logged on.';
?>


anthony dot parsons

If you have to compare object variables like this be careful not to make a typo, or you could end up calling __set() -
<?php
/* Does what you'd expect it to */
if ( $user->password == $user2->password )
/* Doesn't */
if ( $user->password = $user2->password )
?>
To avoid that ever happening, do it like this:
<?php
if ( strval($user->password) == $user2->password )
?>


php

I can't help being surprised that
(string)"0" == (string)"0.00"
evaluates to true. It's the same with strval and single quotes.
=== avoids it.
Why does it matter? One of my suppliers, unbelievably, uses 0 to mean standard discount and 0.00 to mean no discount in their stock files.


brettsg

How come this code in version 4.4 does something different than in version 4.3?
$val = 538759009 ^ 0xAABBCCDD;
print "val=" . $val;
= 2326201276 (version 4.4)
and
= -1968766020 (version 4.3)


hayley watson

As of PHP 5.2, strval() will return the string value of an object, calling its __toString() method to determine what that value is.

nyctofixer

As of PHP 5.1.4 (I have not tested it in later versions), the strval function does not attempt to invoke the __toString method when it encounters an object. This simple wrapper function will handle this circumstance for you:
<?
/**
* Returns the string value of a variable
*
* This differs from strval in that it invokes __toString if an object is given
* and the object has that method
*/
function stringVal ($value)
{
   // We use get_class_methods instead of method_exists to ensure that __toString is a public method
   if (is_object($value) && in_array("__toString", get_class_methods($value)))
       return strval($value->__toString());
   else
       return strval($value);
}
?>


Change Language


Follow Navioo On Twitter
debug_zval_dump
doubleval
empty
floatval
get_defined_vars
get_resource_type
gettype
import_request_variables
intval
is_array
is_binary
is_bool
is_buffer
is_callable
is_double
is_float
is_int
is_integer
is_long
is_null
is_numeric
is_object
is_real
is_resource
is_scalar
is_string
is_unicode
isset
print_r
serialize
settype
strval
unserialize
unset
var_dump
var_export
eXTReMe Tracker