php ::将反引号应用于句子中的第一个单词

时间:2011-01-14 00:43:05

标签: php

基本上我想要做的是,

我有一个看起来像这样的数组:

array(
  array(
    'select' =>'first string',
    'escape' => true
  ),
  array(
    'select' =>'second',
    'escape' => true
  ),
  array(
    'select' =>'the third string',
    'escape' => true
  ),
  array(
    'select' =>'fourth string',
    'escape' => false
  ),
)

我正在循环它,我想最终得到这个输出

array(
  array(
    'select' =>'`first` string',
    'escape' => true
  ),
  array(
    'select' =>'`second`',
    'escape' => true
  ),
  array(
    'select' =>'`the` third string',
    'escape' => true
  ),
  array(
    'select' =>'fourth string',
    'escape' => false
  ),
)

所以基本规则是

  • 仅在转义为真时才应用反引号
  • 反引号仅适用于句子中的第一个单词
  • 如果只有一个单词的反引号被应用于单词

我的计划是使用

if($item['escape']) {
  $pos = (strpos($item['select'], ' ') === false ? strlen($item['select']) : strpos($item['select'], ' '));
  $item['select'] = '`' . substr($item['select'], 0, $pos) . '`' . substr($item['select'], $pos, strlen($item['select']));
}

但是$item['select'] =线似乎很长,有没有更好的方法来写呢?

4 个答案:

答案 0 :(得分:2)

if($item['escape']) {
    $item['select'] = explode(' ', $item['select']);
    $item['select'][0] = '`'.$item['select'][0].'`';
    $item['select'] = implode(' ', $item['select']);
}

应该是好的。

答案 1 :(得分:1)

您可以在空格字符上分割$item['select']

if($item['escape']) {
  $words = explode(' ', $item['select']);
  $words[0] = "`{$words[0]}`";
  $item['select'] = implode(' ', $words);
}

答案 2 :(得分:0)

正则表达式怎么样?

$item['select'] = preg_replace( '/^(.*?)( |\z)(.*)/', '`$1`$2$3' , $item['select']);

它简短,意图明确。

编辑:没有考虑到只有一个单词的情况(现在看起来不是很简单......)

答案 3 :(得分:0)

您可以将正则表达式用作:

foreach($input as $key => &$val) {
        if($val['escape']) {
                $val['select'] = preg_replace('/^(\w+)/','`$1`',$val['select']);
        }
}

See it