基本上我想要做的是,
我有一个看起来像这样的数组:
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'] =
线似乎很长,有没有更好的方法来写呢?
答案 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']);
}
}