【问题标题】:parse_ini_file converts numeric values to stringparse_ini_file 将数值转换为字符串
【发布时间】:2014-01-07 12:57:33
【问题描述】:

我使用 php 命令parse_ini_file 来加载应用程序的配置。 查看 php documentation 有一个示例,在这里看起来,数字值被排除在外,通过使用不带引号的 "。 所以我使用了这样的初始化文件:

arr[] = 1
arr[] = 2
arr[] = "string"
integer_value = 3

使用
$init = parse_ini_file('myConfig.ini',0); 解析该文件 我得到以下结果(var_dump($init);):

array(2) {
  ["arr"]=>
  array(3) {
    [0]=>
    string(1) "1"
    [1]=>
    string(1) "2"
    [2]=>
    string(6) "string"
  }
  ["integer_value"]=>
  string(1) "3"
}

有没有办法将整数值处理为整数,而不是字符串,以获得以下结果:

array(2) {
  ["arr"]=>
  array(3) {
    [0]=>
    int(1)
    [1]=>
    int(2)
    [2]=>
    string(6) "string"
  }
  ["integer_value"]=>
  int(3)
}

【问题讨论】:

  • 你使用的是什么版本的 PHP?
  • @Blender PHP 版本 5.3.8

标签: php string parsing numeric


【解决方案1】:

文档没有说明有关返回相应类型的选项值的任何内容。实际上,它们应该是通常情况下的字符串。 (但是,如果您愿意,可以查看此implementation)。相反,您可以应用简单的回调,例如,通过array_walk_recursive():

$array = ["arr"=>["0", "1", "2"], "integer_value"=>"3", "float_value"=>"-0.5"];
array_walk_recursive($array, function(&$value, $key)
{
    if(is_numeric($value))
    {
        $value = (string)((int)$value)===$value
            ?(int)$value
            :(double)$value;
    }
});

-检查这个fiddle

【讨论】:

  • 谢谢:我喜欢你的脚本:它很简单,而且很成功。 :-)
【解决方案2】:

有点老了,但对于这些天来这里的其他人来说:

从 PHP 5.6.1 开始,[参数 $scanner_mode] 也可以指定为 INI_SCANNER_TYPED。 在这种模式下,尽可能保留布尔、空和整数类型。 字符串值“true”、“on”和“yes”被转换为 TRUE。 “false”、“off”、“no”和“none”被认为是 FALSE。 "null" 在类型化模式下转换为 NULL。此外,如果可能,所有数字字符串都将转换为整数类型。

来源:http://php.net/manual/en/function.parse-ini-file.php

【讨论】:

    猜你喜欢
    • 2019-11-04
    • 1970-01-01
    • 2023-03-24
    • 2017-06-11
    • 1970-01-01
    • 1970-01-01
    • 2017-12-15
    • 1970-01-01
    • 2014-09-08
    相关资源
    最近更新 更多