我有以下字符串:
名称定位电话中断名称定位电话断开名称定位电话
我从一个使用DOM的HTML页面的cURL中得到了这个。
我的最终结果必须是一个JSON文件,如:
Shop 1: { name: "example", location: "example", telephone: "0123"}
Shop 2: { name: "example", location: "example", telephone: "0123"}
但我知道,首先我必须拆分字符串,我尝试了这个
$shops = explode("break",$result);
$values = array();
foreach ($shops as $shop) {
$values = explode("_", $shop);
foreach($values as $value) {
$name = $value[0];
$location = $value[1];
$tel = $value[2];
}
}
但它不起作用。有人能帮我吗?
你在错误的值上爆炸:
Name_Location_Telephone_break_Name_Location_Telephone etc...
将变成一个数组:
0 => 'Name_Location_Telephone_'
1 => '_Name_Location_Telephone_'
2 => '_Name_Location_Telephone_'
etc...
当您分解这些时,第一个将在索引0
处具有Name
,但随后在所有后续分解的索引1
处。
你应该在_break_
上爆炸。
如果你做过任何基本的调试,比如var_dump($shops)
和var_dump($values)
,你就会看到事情是如何变化的。
1)第一次爆炸会保留一些修剪下划线。
2) 您必须使用json_encode方法将数组转换为json数据
一个你可以做的例子
$result = "Name_Location_Telephone_break_Name_Location_Telephone_break_Name_Location_Telephone_break_Name_Location_Telephone_break_";
$shops = explode("_break_",$result);
foreach($shops as $key => $shop) {
$res["Shop ".$key] = explode('_', $shop);
}
$jsonData = json_encode($res);
这并不是编写foreach的确切方式。它不同于Java。签出:http://php.net/manual/en/control-structures.foreach.php例如,从现在起不要犹豫(PHP API非常好)
您几乎接近所需的结果。尝试遵循
$shops = explode("_break_",$result);
$jsonArray = array();
foreach ($shops as $shop){
// three elements are same in response no need to worry just explode in array of three elements.
$value = explode("_", $shop);
// assign prepared array or print it according to your business logic.
$jsonArray[] = array ('name'=>$value[0], 'location'=>$value[1], 'telephone'=>$value[2]);
}
//here you can encode your final multi dimensional array to json string.
echo json_encode($jsonArray);
它不起作用,因为您的第一次爆炸保留了一些修剪下划线。
要么做
$shops = explode("_break_",$result);
或
$shops = trim(explode("break",$result), "_");
试试这个:
$result = "Name_Location_Telephone_break_Name_Location_Telephone_break_Name_Location_Telephone_break_Name_Location_Telephone";
$shops = explode("_break_",$result);
$results = array();
$index = 1;
foreach ($shops as $shop) {
$values = explode("_", $shop);
$results["Shop $index"] = [
'name' => $values[0],
'location' => $values[1],
'telephone' => $values[2],
];
$index++;
}
print_r($results);
结果是:
Array
(
[Shop 1] => Array
(
[name] => Name
[location] => Location
[telephone] => Telephone
)
[Shop 2] => Array
(
[name] => Name
[location] => Location
[telephone] => Telephone
)
[Shop 3] => Array
(
[name] => Name
[location] => Location
[telephone] => Telephone
)
[Shop 4] => Array
(
[name] => Name
[location] => Location
[telephone] => Telephone
)
)
在第一个explode
之后只有break
有多余的"_",这就是为什么结果可能会出错的原因。
第一次爆炸后,您需要修剪$shops数组中字符串最后一个的"_"。
<?php
$result = "Name_Location_Telephone_break_Name_Location_Telephone_break_Name_Location_Telephone_break_Name_Location_Telephone";
$shops = explode("break",$result);
echo json_encode($shops)."'n";
$values = array();
foreach ($shops as $shop){
$values = explode("_", trim($shop, '_'));
echo json_encode($values)."'n";
$name = $values[0];
$location = $values[1];
$tel = $values[2];
echo $name."'n";
}
?>
结果是
["Name_Location_Telephone_","_Name_Location_Telephone_","_Name_Location_Telephone_","_Name_Location_Telephone"]
["Name","Location","Telephone"]
Name
["Name","Location","Telephone"]
Name
["Name","Location","Telephone"]
Name
["Name","Location","Telephone"]
Name