[英]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_all
和array_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.