将单词/短语/句子分为三部分

时间:2019-05-05 09:43:33

标签: php

我想把这个词/短语/句子分成三部分。 fld_example是单词/短语/句子的存储位置。

堆叠流量Abcpqr(UR)

英语会话流畅度(1WIR)

英语熟练程度GHI(2WIR)

测试ADG(3WIR)

堆栈溢出Abcpqr(UR )的输出应为

[0]堆栈溢出

[1] Abcpqr

[2](UR)

以及英语会话Defklmno(1WIR)的流畅度

[0]堆栈溢出

[1] Defklmno

[2](1WIR)

英语水平GHI(2WIR)

[0]溢出

[1] GHI

[2](2WIR)

以及测试ADG(3WIR)

[0]测试

[1] ADG

[2](3WIR)

我使用了这段代码,但这仅对测试(3WIR)

有好处
                                      <?php
                                      $Original = $row['fld_example'];                                  
                                      $OriginalExplode = explode(' ', $Original);
                                      ?>

<input name="example0" id="example0" value="<?php echo $OriginalExplode[0]; ?>" type="text" autocomplete="off" required>

<input name="example1" id="example1" value="<?php echo $OriginalExplode[1]; ?>" type="text" autocomplete="off" required>

2 个答案:

答案 0 :(得分:1)

您可以使用explodestr_replace

$string = "Testing (3WIR)";
$stringToArray = explode(":",str_replace("(",":(",$string));
echo '<pre>';
print_r($stringToArray);

已编辑的问题答案:-

$subject = "Fluency in English Conversation Defklmno (1WIR)";
$toArray = explode(' ',$subject);
if(count($toArray) > 2){
  $first       = implode(" ",array_slice($toArray, 0,count($toArray)-2));
  $second      = $toArray[count($toArray)-2];
  $third       = $toArray[count($toArray)-1];
  $result      = array_values(array_filter([$first, $second, $third]));
}else{
  $result = array_values(array_filter(explode(":",str_replace("(",":(",$subject))));
}

DEMO HERE

答案 1 :(得分:1)

我不喜欢正则表达式,但是这个看起来很不错:

Regex to split a string only by the last whitespace character

因此,PHP代码为:

function splitAtLastWord($sentence)
{
    return preg_split("/\s+(?=\S*+$)/", $sentence);
}

$sentence = "Fluency in English Conversation Defklmno (1WIR)";  

list($begin, $end)    = splitAtLastWord($sentence);
list($first, $middle) = splitAtLastWord($begin);
$result = [$first, $middle, $end]; 

echo "<pre>" . print_r($result, TRUE) . "</pre>";

输出为:

Array
(
    [0] => Fluency in English Conversation
    [1] => Defklmno
    [2] => (1WIR)
)

您还可以编写不带正则表达式的相同函数:

function splitAtLastWord($sentence)
{
    $words = explode(" ", $sentence);
    $last  = array_pop($words);
    return [implode(" ", $words), $last];
}

老实说,这是一种更好的方法。

这是一种计算效率更高的方法:

function splitAtLastWord($sentence)
{
   $lastSpacePos = strrpos($sentence, " ");
   return [substr($sentence, 0, $lastSpacePos), substr($sentence, $lastSpacePos + 1)]; 
}

它看起来不太好看,但速度更快。

无论如何,定义这样一个单独的函数很有用,您可以在其他地方重用它。