Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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
Php 如何在数组中存储此文本数据?_Php_Arrays_Json - Fatal编程技术网

Php 如何在数组中存储此文本数据?

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

我有一些文本数据,我想将其转换成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.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"
}
]