【问题标题】:Php convert string to the right typephp将字符串转换为正确的类型
【发布时间】:2014-11-06 04:55:52
【问题描述】:

我真的在寻找一个可以帮助我像这样转换值的函数(在 var_dump 之后):

string(2) "49" 转整数 或 string(3) "1.2" 浮动。

this 不适合我 谢谢

这是我的代码: 我只有一个递归函数来检查数组的所有元素

            foreach($arr as $key => $value)
            {
                if(is_array($value))
                {
                    $this->__set_types($value);
                }
                if(is_numeric($value))
                {
                    echo getcorrectvariable($value);
                    $arr[$key] = settype($value, gettype_fromstring($value));
                    var_dump($arr);
                }
            }   

function gettype_fromstring($string){
    //  (c) José Moreira - Microdual (www.microdual.com)
    return gettype(getcorrectvariable($string));
}   
function getcorrectvariable($string){
    //  (c) José Moreira - Microdual (www.microdual.com)
    //      With the help of Svisstack (https://stackoverflow.com/users/283564/svisstack)

    /* FUNCTION FLOW */
    // *1. Remove unused spaces
    // *2. Check if it is empty, if yes, return blank string
    // *3. Check if it is numeric
    // *4. If numeric, this may be a integer or double, must compare this values.
    // *5. If string, try parse to bool.
    // *6. If not, this is string.

    $string=trim($string);
    if(empty($string)) return "";
    if(!preg_match("/[^0-9.]+/",$string)){
        if(preg_match("/[.]+/",$string)){
            return (double)$string;
        }else{
            return (int)$string;
        }
    }
    if($string=="true") return true;
    if($string=="false") return false;
    return (string)$string;
}

这是我的数组的一部分 (var_dump)

array(3) {
  [0]=>
  array(3) {
    [0]=>
    array(9) {
      ["id"]=>
      string(3) "106"
      ["idMessageType"]=>
      string(1) "1"
      ["idClientSender"]=>
      string(2) "59"
      ["idClientRecipient"]=>
      string(2) "49"
      ["message"]=>
      string(5) "rwert"
      ["creationTimeStamp"]=>
      string(22) "2014-11-04 10:09:12+05"
      ["readingTimestamp"]=>
      NULL
      ["status"]=>
      string(1) "1"
      ["isMessageActive"]=>
      string(1) "t"
    }
    [1]=>
    array(9) {
      ["id"]=>
      string(3) "105"
      ["idMessageType"]=>
      string(1) "1"
      ["idClientSender"]=>
      string(2) "59"
      ["idClientRecipient"]=>
      string(2) "49"
      ["message"]=>
      string(7) "qwrqewr"
      ["creationTimeStamp"]=>
      string(22) "2014-11-04 10:08:56+05"
      ["readingTimestamp"]=>
      NULL
      ["status"]=>
      string(1) "1"
      ["isMessageActive"]=>
      string(1) "t"
    }
    ["client"]=>
    array(4) {
      ["id"]=>
      string(2) "49"
      ["name"]=>
      string(12) "а аАаВаИаЛб"
      ["surname"]=>
      string(14) "ааАбаИаПаОаВ"
      ["photoName"]=>
      string(50) "49.jpg                                            "
    }
  }

【问题讨论】:

  • 为什么它不起作用?字符串是什么,结果是什么类型?可以加点代码吗?
  • 我已经更新了我的问题
  • 不,但一定是这样

标签: php


【解决方案1】:

floatval 或 intval 将按照您的要求分别执行。

如果您想检索类型...对我来说没有意义,但您可以使用正则表达式创建自定义函数...在这里:

function getTypedNumber($string)
{
$pattern = '/^(\d{1,3})((,)(\d{3}))*((\.)(\d{1,2}))?$|^(\d{1,3})((\.)(\d{3}))*((,)(\d{1,2}))?$/';
$replacement = '\1\8\4\11.\7\14';
$number = preg_replace($pattern, $replacement,$string);
if (is_numeric($number){
 if (strpos($number, ".") === false )  return intval($number);
 else return floatval($number);
}
else return false;
}

它也会处理格式为 10.300,25 或 10,300.25 的数字

编辑

忘了,正则表达式的工作原理是假设 2 个小数位,如果需要可以轻松更改,但它不会处理法语/英语数字样式

【讨论】:

  • 等一下,我怎么知道它是浮动还是整数?
  • 对不起,认为返回intval或floatval时很明显......。相同的函数可以更改为返回“float”或“int”而不是intval或floatval,这样您就可以获得类型。
  • 您的解决方案适用于这种情况 if (!strpos($number, ".") === false ) { return intval($number); } else { 返回 floatval($number); }
  • 你确定??你发布的意思是,如果找到一个点,则返回 int,否则返回 float,这对我来说听起来很奇怪。
  • 谢谢!我已经为我编辑了你的代码和它的工作
【解决方案2】:

快速解决方案:

intval("42") // -> 42
intval("53.4") // -> 53
floatval("53.4") // -> 53.4

为什么不先谷歌搜索“php parse float”?

【讨论】:

  • float 也可以用作 int,因此您可以一直使用 floatval(除非该类型明确表示为 int)。
  • 我不知道我的 var 的类型
  • ^php 也不行。 Php 确实类型杂耍
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-16
  • 1970-01-01
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 2013-07-13
  • 1970-01-01
相关资源
最近更新 更多