将javascript转换为PHP:数组和对象
我想把下面的javascript代码转换成PHP,但是我被卡住了。 这是javascript:将javascript转换为PHP:数组和对象,javascript,php,arrays,object,Javascript,Php,Arrays,Object,我想把下面的javascript代码转换成PHP,但是我被卡住了。 这是javascript: var string=“(慕尼黑:0.1,巴黎:0.2,(塞浦路斯:0.3,布鲁塞尔:0.4)伯尔尼:0.5)汉堡”; var=[]; var-tree={}; var tokens=string.split(/\s*(;|\(|\)|、|:)\s*/); 对于(var i=0;i我重写了您的代码,它生成了正确的结果 <?php $string = '(Munich:0.1,Paris:0.2
var string=“(慕尼黑:0.1,巴黎:0.2,(塞浦路斯:0.3,布鲁塞尔:0.4)伯尔尼:0.5)汉堡”;
var=[];
var-tree={};
var tokens=string.split(/\s*(;|\(|\)|、|:)\s*/);
对于(var i=0;i我重写了您的代码,它生成了正确的结果
<?php
$string = '(Munich:0.1,Paris:0.2,(Cyprus:0.3,Brussels:0.4)Bern:0.5)Hamburg';
$items = parse_code($string);
print_r($items);
function parse_code($string) {
$data = [];
if (preg_match_all('@(\((.*)\))*(\w+)(:([0-9.]+))*@', $string, $matches)) {
foreach ($matches[2] as $n=>$item) {
$node = [];
$node['name'] = $matches[3][$n];
if ($matches[5][$n]) {
$node['length'] = $matches[5][$n];
}
$children = parse_code($matches[2][$n]);
if (count($children)) {
$node['children'] = $children;
}
$data[] = $node;
}
}
return $data;
}
编辑:只有在当前级别中有一个嵌套结构时,此代码才有效。php中的引用与javascript中的引用不同。还可以查看数组附加功能。您不需要进行计数减1,只需使用括号,里面没有任何内容。假设您对输入字符串将包含哪些类型的字符串有些了解。如何将字符串转换为JSON,然后使用函数对其进行解码?@meagar有时我看不到forrest…因此您当然完全正确。无论如何,字符串实际上非常接近JSON(仅使用其他符号)所以我只是简单地替换了一些字符,并使用了json_decode。太好了!谢谢大家……而不是[0-9]+
我会使用\d+\.?\d*
这应该可以防止无效的格式,比如1.2.3
,但从其他方面看还是不错你好,弗拉基米尔。是的,你的解决方案很有效。但是brainware、meagar和Yannberand的评论非常重要。我已经在上面发布了我对他们的回复。
Array
(
[0] => Array
(
[name] => Hamburg
[children] => Array
(
[0] => Array
(
[name] => Munich
[length] => 0.1
)
[1] => Array
(
[name] => Paris
[length] => 0.2
)
[2] => Array
(
[name] => Bern
[length] => 0.5
[children] => Array
(
[0] => Array
(
[name] => Cyprus
[length] => 0.3
)
[1] => Array
(
[name] => Brussels
[length] => 0.4
)
)
)
)
)
)