2017-01-27 10 views
0

Я хотел бы создать php-функцию, которая анализирует строку в массиве (который я нашел не просто), строки сильно варьируются, я не уверен, как это сделать в способ, который будет работать должным образом для любой строки ниже ($ text1, ..., $ 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 [en] => Array ([success] => Ваш баланс равен $ balance $ currency. Ваучер перезаряжается успешно)) удалить/заменить: $ balance $ currency –

+0

Работает в совершенстве. Большое спасибо!!! –

+0

Добро пожаловать, не забудьте подтвердить мой ответ;) – Fky