将字符串解析为数组 {{navigation({"class": "navigation", "id": "navigation"})}} 第 2 部分
让我们简化问题:
我需要的只是用括号之间的逗号来explode()字符串。问题是用逗号选择的元素本身可以有逗号,因此简单的爆炸不起作用。我不是问如何解码 JSON。
参数的数量,它们的类型总是不同的,例如
('foo')
('bar', NULL)
({"JSON": "data"}, 'test')
假设我有这部分代码:
({"class": "navigation", "id": "navigation"}, NULL, 'bar' /* [..] */)
任何人都可以建议一个正则表达式(或替代方法)来获取所有逗号分隔的条目(作为字符串)?问题是变量本身可以包含逗号。因此,我认为这需要递归。
预期结果将是一个包含以下条目的数组:
{"class": "navigation", "id": "navigation"}
NULL
'bar'
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
经过几个小时的工作,我发现 PHP 无法解析包含 NULL(大写 null)的 JSON 字符串。这就是导致以下代码无法工作的原因。不过,只需将 NULL 替换为 null 就可以解决问题。
After many hours of work, I have come across that PHP will fail to parse JSON string containing NULL (uppercase null). That was what caused the following code not to work. However, simply replacing NULL to null solved the problem.
这是有效的:
结果:
不完全是递归正则表达式,而是前瞻断言。条件是逗号后面不能跟},或者应该跟{。
Here's something that works:
Result:
Not exactly a recursive regex, but rather a look ahead assertion. The condition is that comma should not be followed by }, or it should be followed by {.
看起来像 json.您应该使用 json_decode,它将创建一个数组,然后您可以循环遍历该数组以获取键/值。
That looks like json. You should use json_decode, which will create an array, then you can loop through the array to get the key/values.
黑客警报!
将 {} 括在单引号中,以便您的 {"JSON": "data"} 变为 '{"JSON": "data"}'
使用 str_getcsv() 解析字符串(现在是 CSV)
遍历结果数组并从 {} 中去掉单引号
hack alert!
wrap {} into single quotes, so that your {"JSON": "data"} becomes '{"JSON": "data"}'
use str_getcsv() to parse a string (it's a CSV now)
go though resulting array and strip single quotes from {}
在 [ 和 ] 之间添加该代码,并使用 json_decode()
它应该返回一个关联数组
您应该使用 < code>[] 表示隐式索引,
{}
表示显式索引示例
:
您不能将隐式/显式索引混合到同一结构中,但您可以创建一个包含不同值的数组 (
[]
),如上面的示例所示。Add that code between [ and ], and use json_decode()
It should return an associative array
You should use
[]
for implicit indexes and{}
for explicit indexesExample:
You can not mix implicit/explicit indexes into the same structure, but you can for example, create an array (
[]
) containing different values as shown in the examples above.