2011-01-14 15 views
4

im Grunde, was ich versuche zu tun,php :: anwenden Backticks erstes Wort im Satz

Ich habe ein Array, die etwa wie folgt aussieht:

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 
), 
) 

ich darüber bin Looping und ich will mit diesem Ausgang am Ende

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 
), 
) 

so Grundregeln sind

  • Backticks sind nur dann angewendet, wenn Flucht wahr ist
  • Backticks sind nur auf das erste Wort in einem Satz
  • wenn es nur ein Wort Backticks auf das Wort angewendet werden angewendet

Mein Plan

zu verwenden war
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'])); 
} 

aber die $item['select'] = Linie scheint ziemlich langatmig, gibt es einen besseren Weg, es zu schreiben?

Antwort

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

sollte gut sein.

1

Sie könnten $item['select'] auf das Leerzeichen aufgeteilt:

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

Wie über einen regulären Ausdruck?

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

Es ist kurz und seine Absicht klar.

Redaktion: Hat nicht berücksichtigt den Fall, in dem es nur ein Wort ist (es ist nicht sehr einfach, jetzt sieht ...)

0

Sie regex als verwenden können:

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

See it