2016-07-21 16 views
0

のManupulationこれは生のデータです:PHP - 文字列

3 
1/1.0 
Question 
Answer 1 
Answer 2 
.... 
Answer n 
2 
1/2.0 
Question 
Answer 1 
Answer 2 
.... 
Answer n 

これは、所望の出力です:

[ 
    3, 1.0, [],    
    "Question", 
    [ 
     "Answer 1", 
     "Answer 2", 
     .... 
     "Answer n"   
    ]    
], 
[ 
    2, 2.0, [],    
    "Question", 
    [ 
     "Answer 1", 
     "Answer 2", 
     .... 
     "Answer n"   
    ]    
], 

これは私がこれまで何をやったかである:

$step1 = str_replace("1/"," ", $raw); 
$step2 = explode(PHP_EOL, $step1); 
foreach ($step2 as $key => &$value) { 
    if(floatval($value) == 0) { 
     $value = '"'.$value.'"'; 
    }; 
    $value = $value.","; 
} 

今や難しい部分:角括弧とタブを追加する方法。 私は一日中私の頭を叩いています。何か案は?ありがとうございました!

+0

ので、これは ' "3、1.0は、[]"'単一の文字列値である必要があり、またはそれらは別々の配列項目すべきですか? – RomanPerekhrest

+0

hm、最後に一行にあり、スペースで区切られていれば問題ありません。一行ではなくてもOKです。 引用符で囲まれていないことに注意してください。ありがとう、 –

+0

私の答えはあなたのために働くのですか? 「はい」の場合は – ebildude123

答えて

0
$raw = "3 
1/1.0 
Question 
Answer 1 
Answer 2 
.... 
Answer n 
2 
1/2.0 
Question 
Answer 1 
Answer 2 
.... 
Answer n"; 

$getAllLines = array_map("trim", explode("\n", $raw)); 
$endStr = ""; 
$nextIsQuestion = false; 

foreach ($getAllLines as $getLine) { 
    if (is_numeric($getLine)) { 
     if (!empty($endStr)) { 
      $endStr = substr($endStr, 0, -2) . "\n"; 
      $endStr .= "\t]\n],\n"; 
     } 
     $endStr .= "[\n\t" . $getLine . ", "; 
    } 
    else { 
     if (strpos($getLine, "/") !== false) { 
      $getNum = substr($getLine, strpos($getLine, "/") + 1); 
      $endStr .= $getNum . ", [],\n\t"; 
      $nextIsQuestion = true; 
     } 
     elseif ($nextIsQuestion) { 
      $endStr .= "\"" . $getLine . "\",\n\t[\n"; 
      $nextIsQuestion = false; 
     } 
     else { 
      $endStr .= "\t\t\"" . $getLine . "\",\n"; 
     } 
    } 
} 
$endStr = substr($endStr, 0, -2) . "\n"; 
$endStr .= "\t]\n]"; 

echo $endStr; 

出力

[ 
     3, 1.0, [], 
     "Question", 
     [ 
       "Answer 1", 
       "Answer 2", 
       "....", 
       "Answer n" 
     ] 
], 
[ 
     2, 2.0, [], 
     "Question", 
     [ 
       "Answer 1", 
       "Answer 2", 
       "....", 
       "Answer n" 
     ] 
] 
+0

に感謝します。素晴らしい答えですが、「質問」と「回答」には数字とスラッシュ(「/」)が含まれています。スラッシュはあなたのスクリプトを壊します。それは修正できますか? 要素の順序に基づいたアプローチは可能ですか(これは実行可能ですが、これまで成功することはできません)? –