Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将javascript转换为PHP:数组和对象_Javascript_Php_Arrays_Object - Fatal编程技术网

将javascript转换为PHP:数组和对象

将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

我想把下面的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,(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
                                        )

                                )

                        )

                )

        )

)