2016-09-16 187 views
1

我在我的parameters.yml中有一个月数组,它使php函数的日期('m')(月数与前导零)和默认选择的字母之间的关系生成一个代码。parameter.yml损坏的数字索引Symfony2

months: 
    01: 'A' 
    02: 'B' 
    03: 'C' 
    04: 'D' 
    05: 'E' 
    06: 'F' 
    07: 'G' 
    08: 'H' 
    09: 'I' 
    10: 'J' 
    11: 'K' 
    12: 'L' 

这里是一个的var_dump($这 - > getParameters( '月'))的结果:

阵列(大小= 11)
1 =>串 'A'(长度= 1)
2 =>串 'B'(长度= 1)
3 =>字符串 'C'(长度= 1)
4 =>字符串 'd'(长度= 1)
5 =>串'E'(长度= 1)
6 =>字符串'F'(长度= 1)
''''长度= 1
11 =>字符串'K' (长度= 1)
12 =>字符串“L”(长度= 1)

我终于解决它除去索引的前导零,但任何人知道为什么08被改变为0和09指数消失了吗?

+0

尝试使用字符串,如“01”索引:“A”等 – Napas

回答

2

的原因是,如果你不使用引号0102 ... 07被解释为基地8号(八进制),0809Invalid numeric literal(无效基地8号),10..12被解释为整数数字,你需要使用引号来解决这个问题:

months: 
    '01': 'A' 
    '02': 'B' 
    '03': 'C' 
    '04': 'D' 
    '05': 'E' 
    '06': 'F' 
    '07': 'G' 
    '08': 'H' 
    '09': 'I' 
    '10': 'J' 
    '11': 'K' 
    '12': 'L' 

看到这里引用http://symfony.com/doc/current/components/yaml/yaml_format.html#numbers

0

这就是整数字符串之间的差异。

更改01'01'并且您的问题已解决。

但是,为什么你将所有的字母字符存储在parameters.yml中?它似乎并没有被环境相关的,有一个简单的方法来获得相同的排列是这样的:

$alphas = range('A', 'L'); 
1

PHP使用0前缀来表示后面的数字是八进制。因此8和9是无效的。

只需运行echo 08;echo 09;即可查看错误输出。