2016-07-26 50 views
2

我有以下字符串:PHP - 爆炸陣列成鍵 - >值數組

Name_Location_Telephone_break_Name_Location_Telephone_break_Name_Location_Telephone_break_Name_Location_Telephone_break_

我得到這個使用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]; 
    } 
} 

但它不工作。有誰能夠幫助我?

+0

我認爲你應該用更好的外觀來提出你的問題,比如[this](http://stackoverflow.com/help/formatting)。 – 16ctt1x

回答

1

你在錯誤的值爆炸:

Name_Location_Telephone_break_Name_Location_Telephone etc... 

將成爲一個數組:

0 => 'Name_Location_Telephone_' 
1 => '_Name_Location_Telephone_' 
2 => '_Name_Location_Telephone_' 
etc... 

當你引爆這些,第一個將有Name在指數0,但隨後在對所有後續爆炸指數1

您應該在_break_上爆炸。

如果你已經做了任何基本的調試,比如var_dump($shops)var_dump($values),你會看到事情是如何轉移的。

0

您幾乎接近您的要求的結果。請嘗試以下步驟

$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); 
0

第一次爆炸後,您需要修剪$ stores數組中最後一個字符串處的'_'。

<?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 
1

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); 
+0

爲什麼OP應該這樣做?一個好的答案***將總是解釋所做的事情以及爲什麼這樣做,不僅是爲了OP,還是爲了將來訪問SO。 –

+0

好的,我編輯我的答案 – DOZ

0

它不工作,因爲你的第一個爆炸保留一些修整下劃線例子。

要麼

$shops = explode("_break_",$result); 

$shops = trim(explode("break",$result), "_"); 
0

試試這個:

$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有備用「_」,這就是爲什麼結果可能會出錯。