2017-01-27 7 views
0

文字列を配列に解析するPHP関数を作成したいと思います。文字列は大きく変わります。 ($テキスト1、...、$ textn)以下のいずれかの文字列を正しく動作する方法:文字列を解析して配列にする関数を作成するPHP

<?php 

    $text1 ='balance_check!en:[ussd]Your balance is $balance $currency;ru:[ussd]Vash balans $balance $currency;'; 
    //function outputs: $text_array = array ('type'=>'ussd','en'=>'Your balance is', 'ru'=>'Vash balans'); 

    $text2 = 'voicemail!:[redirect]*44*2*$number'; 
    //function outputs: $text_array = array('type'=>'redirect'); 

    $text3='callerid!en:success=[ussd]$callerid is your Caller-ID/error=[ussd]Bad caller-ID number;'; 
    //function outputs: $text_array = array('type'=>'ussd','en'=>array('success'=>'is your Caller-ID', 'error'=>'Bad caller-ID number')); 


    $text4 ='voucher_recharge!en:success=[sms]Your balance is $balance $currency. Voucher recharged successfully'; 
    //function outputs: $text_array = array('type'=>'sms','en'=>array('success'=>array('Your balance is','Voucher recharged successfully'),),); 




//parse into an array 
function multiexplode($text) { 

     //parse $text into array 

     // return $text_array; 
    } 


    ?> 
+0

あなたが望むもの文字列をつかみ、すべての単語を配列の項目にすることですか? –

+0

文字列を作成していますか、それとも他の場所から取得していますか? –

+0

ジェラルド、はい。すべての単語を項目にする –

答えて

0

私はかなりよく分からないが、あなたはそれをテストすることができます

EDIT

function transform($string) { 
    $string = preg_replace('/\$[a-zA-Z0-9]+/i', '', $string); // remove $words pattern 
    $text = end(explode('!',$string, 2)); // get part of string targeted 
    preg_match_all('#([a-z]{2})?\:?([a-z]+)?\=?\[([a-zA-Z]+)\]#iU', $text, $matches); // Find all parts needed to build array 
    $output = array(); 
    $text = str_replace($matches[0], '#SPLITME#', $text); 

    $sentences = explode('#SPLITME#', $text); 
    foreach ($sentences as $k => $v){ 
    if(empty($v) || $v == '') unset($sentences[$k]); 
    } 
    $sentences = array_values($sentences); 
    $lang_memory = null; 
    foreach ($matches[1] as $key => $lang){ 
    $output['type'] = $matches[3][0]; // get type 
    if(!empty($lang)){ 
     if(isset($matches[2][$key]) && !empty($matches[2][$key])){ 
     // success or error key found 
     $output[$lang][$matches[2][$key]] = $sentences[$key]; 
     $lang_memory = $lang; 
     }else{ 
     $output[$lang] = $sentences[$key]; // no success of error key found 
     } 
    }else if($lang_memory != null){ 
     if(isset($matches[2][$key]) && !empty($matches[2][$key])){ 
     $output[$lang_memory][$matches[2][$key]] = $sentences[$key]; 
     } 
    } 
    } 

    return $output; 
} 
+0

お試しいただきありがとうございます。良いスタートは、 '成功'や 'エラー'がないため、おそらく$ text1ではうまくいきません。元の文字列にある場合にのみ、これらのキー(成功とエラー)が必要になります。もう一つは、 '$'で始まり、/があればそれを削除する単語を削除することです。 Array([type] => sms [ja] =>配列([成功] =>残高は$ balance $通貨です)バウチャーが正常に再充電されました)) $ balance $ currency –

+0

完全に。どうもありがとうございました!!! –

+0

歓迎です、私の答えを検証することを忘れないでください;) – Fky

関連する問題