2016-07-26 5 views
2
나는 다음과 같은 문자열이

로 배열을 폭발.PHP는 키 -> 값 배열

내 최종 결과이 같은 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

답변

0

정확히 foreach를 쓰는 방법이 아닙니다. Java와는 다릅니다. 체크 아웃 :

Name_Location_Telephone_break_Name_Location_Telephone etc... 

가 배열 될 것이다 : 예제 http://php.net/manual/en/control-structures.foreach.php, 지금부터 그렇게 주저하지 말고 당신은 잘못된 값에 폭발하고

1

(파묻혀 PHP API는 매우 좋다) :이 폭발 할 때

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

, 첫 번째 인덱스 0에서 Name을 가지고 있지만됩니다 다음 모든 후속 폭발에 대한 인덱스 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

첫 번째 폭발 후 $ 상점 배열의 마지막 문자열에서 '_'을자를 필요가 있습니다. 폭발 귀하의 첫 번째

<?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) 데이터

당신이 폭발 할 첫 번째는 일부 트리밍 밑줄을 유지하기 때문에

$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에서뿐만 아니라 미래의 방문객에게도 제공합니다. –

+0

내 대답을 편집합니다. – DOZ

0

그것은 작동하지 않습니다 할 수있는 예를 JSON으로 배열을 변환하는 json_encode 방법을 사용합니다.

중 하나

$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으로 결과가 잘못되었을 수 있습니다.