Edit report at https://bugs.php.net/bug.php?id=71611&edit=1
ID: 71611
Updated by: [email protected]
Reported by: asylow at free dot fr
Summary: array index starting with number in double quote
string
Status: Open
-Type: Bug
+Type: Documentation Problem
Package: *General Issues
PHP Version: 7.1
Block user comment: N
Private report: N
New Comment:
It's actually slightly different. The scanner is regex based, and
if it is in ST_VAR_OFFSET state, it checks for a decimal number
(and matches 1), so it yields a numeric string. Then it proceeds,
and matches a label (a), and yields it as string. The parser
doesn't expect that, though. This might be fixable, but I see no
point in doing that, especially since the complex interpolation
syntax already supports this, and the docs state[1]:
| For anything more complex, you should use the complex syntax.
We need to document, though, what is more complex, i.e. what
exactly is supported as array index for the simple syntax.
[1] <https://www.php.net/manual/en/language.types.string.php#language.types.string.parsing>
Previous Comments:
------------------------------------------------------------------------
[2018-09-09 01:27:41] [email protected]
> the parser seems to stop at the first alpha character
Keys like "a1a" work. The parser is deciding whether the key is a string or number based on the first character: starts with a letter then it's a string, starts with a number then it's a number. So "1a" looks like a number at first, but then it hits the 'a' and gets confused.
Given the normal string/int type juggling with array keys, I suspect treating the key always as a string would work.
------------------------------------------------------------------------
[2018-09-09 01:14:29] [email protected]
The change for this bug may also affect the way we declare variables starting with a number: https://3v4l.org/dVGQD
------------------------------------------------------------------------
[2016-02-16 23:23:53] [email protected]
This may be fixed, but working syntax is
echo "${array['1a']}";
or
echo "{$array['1a']}";
You should use {} for complex expression. We need improvement for string offset, though.
php > echo "${str{1}}";
PHP Parse error: syntax error, unexpected '{' in php shell code on line 1
php > echo "{$str{1}}";
b
------------------------------------------------------------------------
[2016-02-16 18:27:26] asylow at free dot fr
Description:
------------
In a double quoted string, an array index beginning with numbers followed by letters is not correctly interpreted.
The documentation regarding Nowdocs says : "With array indices, the closing square bracket (]) marks the end of the index." but the parser seems to stop at the first alpha character.
Of course this can be treated with the "Complex (curly) syntax" but "1a" is not more complex than "a1".
Test script:
---------------
$array['a1'] = 'foo';
echo "$donnees[a1]";
// foo
$array['1a'] = 'foo';
echo "$donnees[1a]";
// Parse error: syntax error, unexpected 'a' (T_STRING), expecting ']'
Expected result:
----------------
foo
foo
Actual result:
--------------
Parse error: syntax error, unexpected 'a' (T_STRING), expecting ']'
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=71611&edit=1
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.