Php 如何在数组中存储此文本数据?
我有一些文本数据,我想将其转换成json数组格式,但我不知道如何分割文本 我试过了,但是没有好结果 这是文本数据:Php 如何在数组中存储此文本数据?,php,arrays,json,Php,Arrays,Json,我有一些文本数据,我想将其转换成json数组格式,但我不知道如何分割文本 我试过了,但是没有好结果 这是文本数据: IP Address: 141.101.104.169 Country: Germany State: North Rhine-Westphalia City: Neuss Latitude: 51.1981 Longitude: 6.6850000000000005 这只是我网站上的文字。但我希望它是json格式的,如下所示: { "IP_Address": "141.10
IP Address: 141.101.104.169
Country: Germany
State: North Rhine-Westphalia
City: Neuss
Latitude: 51.1981
Longitude: 6.6850000000000005
这只是我网站上的文字。但我希望它是json格式的,如下所示:
{
"IP_Address": "141.101.104.169",
"Country": "Germany",
"State": "North Rhine-Westphalia",
"City": "Neuss",
"Latitude": "51.1981",
"Longitude": "6.6850000000000005",
}
这在任何php函数或方法中都是可能的吗?如果您可以根据我的情况发布一些示例,那就太好了。对于您的示例数据,一个选项是在第一部分之前匹配所有示例:,在第二部分中使用一个模式和两个捕获组匹配其余示例
^([^:]+)\h*:\h*(.*)
字符串的开头^
组1,捕获匹配的1+乘以任何字符,但:([^::]+)
在水平空白字符之间匹配\h*:\h*
:
捕获组2,匹配除换行符以外的任何字符0+次(.*)
$data = <<<DATA
IP Address: 141.101.104.169
Country: Germany
State: North Rhine-Westphalia
City: Neuss
Latitude: 51.1981
Longitude: 6.6850000000000005
DATA;
preg_match_all("~^([^:]+)\h*:\h*(.*)~m", $data, $matches);
$result = json_encode(array_combine($matches[1], $matches[2]));
print_r($result);
一种简单的方法是使用
explode()
,将其拆分为单独的行,然后将其拆分为标记/值部分
$input = 'IP Address: 141.101.104.169
Country: Germany
State: North Rhine-Westphalia
City: Neuss
Latitude: 51.1981
Longitude: 6.6850000000000005';
$output = [];
foreach ( explode(PHP_EOL, $input) as $line ) {
list($tag,$value) = explode(":", $line, 2);
$output[trim($tag)] = trim($value);
}
echo json_encode($output);
首先,您需要分解基于行和基于字符串的数据。您可以使用
explode('\n',$str)代码>以分析行
$data = 'IP Address: 141.101.104.169
Country: Germany
State: North Rhine-Westphalia
City: Neuss
Latitude: 51.1981
Longitude: 6.6850000000000005';
$lines = explode("\n", $data);
foreach($lines as $line_number => $line){
$line_to_data = explode(": ", $line);
$key = $line_to_data[0];
$value = $line_to_data[1];
$array[] = array($key => $value );
}
$json = json_encode($array);
print_r($json);
结果:
[
{
"IP Address":"141.101.104.169\r"
},
{
"Country":"Germany\r"
},
{
"State":"North Rhine-Westphalia\r"
},
{
"City":"Neuss\r"
},{
"Latitude":"51.1981\r"
},{
"Longitude":"6.6850000000000005"
}
]
您可以使用json_encode('要编码为json对象的数据')
$outputdata=json\u encode($data)
您可以使用序列化($array)
在字符串上强制转换数组,并取消序列化($array)
将字符串强制转换为数组到目前为止您尝试了什么?名字是固定的吗?如果不是的话,有些更难(IP地址有一个空格,所以很难知道何时拆分)。今年的名字是合适的,因为我是从外部网站获得的,但名字后面的值可能会改变。我很高兴,谢谢你,它完美地满足了我的需要。非常感谢。
[
{
"IP Address":"141.101.104.169\r"
},
{
"Country":"Germany\r"
},
{
"State":"North Rhine-Westphalia\r"
},
{
"City":"Neuss\r"
},{
"Latitude":"51.1981\r"
},{
"Longitude":"6.6850000000000005"
}
]