Какой разделитель был использован? - PullRequest
0 голосов
/ 12 октября 2011

Мне нужно было разделить строку по разным разделителям.Поэтому я нашел и использовал этот код:

function explodeX($delimiters,$string)
{
    $return_array = Array($string);
    $d_count = 0;
    while (isset($delimiters[$d_count]))
    {
        $new_return_array = Array();
        foreach($return_array as $el_to_split)
        {
            $put_in_new_return_array = explode($delimiters[$d_count],$el_to_split);
            foreach($put_in_new_return_array as $substr)
            {
                $new_return_array[] = $substr;
            }
        }
        $return_array = $new_return_array;
        $d_count++;
    }
    return $return_array;
} 

Он работал нормально, но теперь мне нужно повернуть его вспять и найти, какой разделитель он фактически использовал.Я использовал такую ​​строку:

$val=explodeX(array("+","-","*","/"), $input);

Теперь мне нужно вернуть правильный разделитель обратно.

Заранее спасибо.

1 Ответ

0 голосов
/ 12 октября 2011

Используются все разделители, которые вы установили в $delimiters, как показано в этой строке:

while (isset($delimiters[$d_count]))

$d_count увеличивается в нижней части цикла, $d_count++, и $return_array возвращается после того, как он проходит по всем разделителям, отделяя от $string столько, сколько вы указали.

Вернуть правильный разделитель в положение, в котором он находился ранее, вы не сможете, если не измените информацию, которую вы возвращаете в $return_array. Что-то вроде этого - то, что вы ищете:

$return_array[] = $new_return_array;
$delim = $delimiters[$d_count];
$return_array['delim'] = new Array();
$return_array['delim'][$delim][] = $new_return_array;
$d_count++;

Это сохранит слова, разделенные каждым разделителем, в дочернем массиве под индексом delim вашего возвращенного результата. Тогда все, что вам нужно сделать, чтобы взорвать их обратно, это что-то вроде этого:

$string2 = '';
foreach ( $return_array as $delim => $word )
{
    // not sure how to reverse your function at this moment, will get back with this part...
}
...