2014-01-07 2 views
2

Я использую команду php parse_ini_file для загрузки конфигурации приложения. Глядя на php documentation, есть пример, где бы он ни выглядел, что числовые значения исключаются, используя те без кавычек ". Таким образом, я использовал Init-файл вроде этого:parse_ini_file преобразует числовые значения в строку

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

PARSING файл с
$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) 
} 
+1

Какую версию PHP вы используете? – Blender

+0

@Blender PHP Version 5.3.8 –

ответ

2

Документ ation ничего не сообщает о возвращаемых значениях опций соответствующего типа. Фактически, они должны быть строками в общем случае. (Но, если хотите, вы можете проверить это 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; 
    } 
}); 

-check этого fiddle.

+0

Спасибо: мне нравится ваш скрипт: он прост и делает работу. :-) –

Смежные вопросы