php-将数组分解为键->;值数组

php-将数组分解为键->;值数组,php,arrays,Php,Arrays,我有以下字符串: 姓名位置电话中断姓名位置电话中断姓名位置电话中断姓名位置电话中断电话中断 我使用DOM从一个HTML页面的卷曲中得到了这一点 我的最终结果必须是一个JSON文件,如: Shop 1: { name: "example", location: "example", telephone: "0123"} Shop 2: { name: "example", location: "example", telephone: "0123"} 但我知道首先我必须分开绳子,我试过这个 $s

我有以下字符串:

姓名位置电话中断姓名位置电话中断姓名位置电话中断姓名位置电话中断电话中断

我使用DOM从一个HTML页面的卷曲中得到了这一点

我的最终结果必须是一个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];
    }
}

但它不起作用。有人能帮我吗?

这不是你写foreach的方式。它不同于Java。
签出:例如,从现在开始,请毫不犹豫地这样做(thei PHP API非常好)

您使用了错误的值:

Name_Location_Telephone_break_Name_Location_Telephone etc...
将成为一个数组:

0 => 'Name_Location_Telephone_'
1 => '_Name_Location_Telephone_'
2 => '_Name_Location_Telephone_'
etc...
分解这些时,第一个将在索引
0
处具有
Name
,但随后在索引
1
处具有所有后续分解

您应该在
\u break\u上爆炸


如果你做过任何基本的调试,比如
var\u dump($shops)
var\u dump($values)
,你就会看到事情是如何变化的。

你几乎接近了你需要的结果。试着跟随

 $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数组中字符串最后一个的“389;”

<?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";
    }
?>
1) 第一次爆炸会保留一些修剪下划线

2) 必须使用方法将数组转换为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);

它不起作用,因为第一次爆炸会保留一些修剪下划线

或者

$shops = 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
        )

)

在第一次
爆炸后,你只需
中断
,就有多余的“uu”,这就是结果可能会出错的原因。

我认为你应该让你的问题看起来更清楚,比如。为什么OP要尝试这个?一个好的答案总是会有一个解释,说明做了什么以及为什么这样做,不仅是为了OP,而且是为了未来的访客。
$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
        )

)