parse_ini_file将数值转换为字符串

时间:2014-01-07 12:57:34

标签: php string parsing numeric

我使用php命令parse_ini_file加载应用程序的配置。 通过使用那些没有引号"的示例,看看php documentation就是一个例子,看起来是数字值除外。 所以我使用了这样的init文件:

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)
}

2 个答案:

答案 0 :(得分:2)

文档没有说明返回相应类型的选项值。事实上,它们应该是普通情况下的字符串。 (但是,如果您愿意,可以查看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

答案 1 :(得分:1)

有些老了,但这些天来还有谁来

  

从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