繁体   English   中英

如何将字符串转换为数组?

[英]how to convert string to array?

请帮助解决问题。 我有一个这样的字符串:

[MoveNode(node='/html/head/meta[6]', target='/html/head[1]', position=22), MoveNode(node='/html/body/div[1]/main /div[1]/div/div/div/div/div[2]/ul/li[1]/a[1]', target='/html/head[1]', position=15), RenameNode (node='/html/head/a[1]', tag='meta'), InsertAttrib(node='/html/head/meta[6]', name='content', value='text text 文本text(文本文本), text'), InsertAttrib(node='/html/head/meta[6]', name='name', value='description'), DeleteAttrib(node='/html/head/meta [6]', name='href'), DeleteAttrib(node='/html/head/meta[6]', name='title'), UpdateTextIn(node='/html/head/meta[6]' , text=None), MoveNode(node='/html/body/div[1]/main/footer/ul/li[2]/a[1]', target='/html/head[1]', position=16), RenameNode(node='/html/head/a[1]', tag='meta'), DeleteNode(node='/html/body/div[1]/main/div[1]/ div/header/div/div/div[2]/div/h6[1]'), DeleteNode(node='/html/body/div[1]/main/div[1]/div/header/div/ div/div[2]/div[1]')]

我需要将这个字符串转换成这样的数组。 怎么做?

Array
(
    [MoveNode_1] => Array
        (
            [node] => /html/head/meta[6]
            [target] => /html/head[1]
            [position] => 22
        )
...
    [InsertAttrib_4] => Array
        (
            [node] => /html/head/meta[6]
            [name] => content
            [value] => text text text text (text text), text
        )

    [InsertAttrib_5] => Array
        (
            [node] => /html/head/meta[6]
            [name] => name
            [value] => description
        )
...

    [MoveNode_9] => Array
        (
            [node] => /html/body/div[1]/main/footer/ul/li[2]/a[1]
            [target] => /html/head[1]
            [position] => 16
        )
...
)

试图解决这样

$str = '....'; 
$arr0 = explode("), ", $str);
$arr2 = [];
$i = 1;
foreach ($arr0 AS $arr1) {
    $arrs = explode("(", $arr1);
    parse_str(str_replace(['\'', ', '], ['', '&'], $arrs[1]), $output);
    $arr2[$arrs[0] . "_" . $i] = $output;
    $i++;
}
print_r($arr2);
But because of the brackets inside the text, the array is formed incorrectly

您可以结合使用preg_match_allarray_map从字符串中提取函数名称、节点字符串和键值对。

        $str = '[MoveNode(node=\'/html/head/meta[6]\', target=\'/html/head[1]\', position=22), MoveNode(node=\'/html/body/div[1]/main/div[1]/div/div/div/div/div[2]/ul/li[1]/a[1]\', target=\'/html/head[1]\', position=15), RenameNode(node=\'/html/head/a[1]\', tag=\'meta\'), InsertAttrib(node=\'/html/head/meta[6]\', name=\'content\', value=\'text text text text (text text), text\'), InsertAttrib(node=\'/html/head/meta[6]\', name=\'name\', value=\'description\'), DeleteAttrib(node=\'/html/head/meta[6]\', name=\'href\'), DeleteAttrib(node=\'/html/head/meta[6]\', name=\'title\'), UpdateTextIn(node=\'/html/head/meta[6]\', text=None), MoveNode(node=\'/html/body/div[1]/main/footer/ul/li[2]/a[1]\', target=\'/html/head[1]\', position=16), RenameNode(node=\'/html/head/a[1]\', tag=\'meta\'), DeleteNode(node=\'/html/body/div[1]/main/div[1]/div/header/div/div/div[2]/div/h6[1]\'), DeleteNode(node=\'/html/body/div[1]/main/div[1]/div/header/div/div/div[2]/div[1]\')]';




 preg_match_all('/([\w]+)\(([^)]+)\)/', $str, $matches);
        $functions = $matches[1];
        $nodes = $matches[2];
        
        $result = array_map(function ($function, $node) {
            preg_match_all('/(\w+)=([^,]+)/', $node, $node_matches);
            $keys = $node_matches[1];
            $values = $node_matches[2];
            return [$function => array_combine($keys, $values)];
        }, $functions, $nodes);
        echo "<pre>";
        print_r($result);
        exit;

结果数组就像

Array
    (
        [0] => Array
            (
                [MoveNode] => Array
                    (
                        [node] => '/html/head/meta[6]'
                        [target] => '/html/head[1]'
                        [position] => 22
                    )
    
            )
    
        [1] => Array
   

     (
            [MoveNode] => Array
                (
                    [node] => '/html/body/div[1]/main/div[1]/div/div/div/div/div[2]/ul/li[1]/a[1]'
                    [target] => '/html/head[1]'
                    [position] => 15
                )

        )

    [2] => Array
        (
            [RenameNode] => Array
                (
                    [node] => '/html/head/a[1]'
                    [tag] => 'meta'
                )

        )

    [3] => Array
        (
            [InsertAttrib] => Array
                (
                    [node] => '/html/head/meta[6]'
                    [name] => 'content'
                    [value] => 'text text text text (text text'
                )

        )

    [4] => Array
        (
            [InsertAttrib] => Array
                (
                    [node] => '/html/head/meta[6]'
                    [name] => 'name'
                    [value] => 'description'
                )

        )

    [5] => Array
        (
            [DeleteAttrib] => Array
                (
                    [node] => '/html/head/meta[6]'
                    [name] => 'href'
                )

        )

    [6] => Array
        (
            [DeleteAttrib] => Array
                (
                    [node] => '/html/head/meta[6]'
                    [name] => 'title'
                )

        )

    [7] => Array
        (
            [UpdateTextIn] => Array
                (
                    [node] => '/html/head/meta[6]'
                    [text] => None
                )

        )

    [8] => Array
        (
            [MoveNode] => Array
                (
                    [node] => '/html/body/div[1]/main/footer/ul/li[2]/a[1]'
                    [target] => '/html/head[1]'
                    [position] => 16
                )

        )

    [9] => Array
        (
            [RenameNode] => Array
                (
                    [node] => '/html/head/a[1]'
                    [tag] => 'meta'
                )

        )

    [10] => Array
        (
            [DeleteNode] => Array
                (
                    [node] => '/html/body/div[1]/main/div[1]/div/header/div/div/div[2]/div/h6[1]'
                )

        )

    [11] => Array
        (
            [DeleteNode] => Array
                (
                    [node] => '/html/body/div[1]/main/div[1]/div/header/div/div/div[2]/div[1]'
                )

        )

)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM