私はいくつかの既製コードを使用していますが、implode &を使ってタグを写真に割り当てました。あなたが2ワードのタグを試したように、それを分割していたようなものです。 私は見つけた正規表現を使ってexplog関数をpreg_split関数に置き換えましたが、関数&の正規表現http://php.fnlist.com/regexp/preg_splitをテストしても、タグが正しく分割されていることがわかります。preg_split()とimplode()newbie help please(正しいタグをしようとしています)
私は「犯罪、愛、ミステリー、犯罪ドラマ、ロマンス」 きれいにフォーマットされたタグなどの入力から、取得しようとしています:「犯罪、愛、ミステリー、犯罪ドラマ、ロマンス」と私が代わりに取得: 「犯罪、愛、謎、ロマンス "
私は以下のコードを与えています。 助けてください!
<?php
class PhotoTagsController extends AppController {
var $name = 'PhotoTags';
var $uses = array('PhotoTag', 'Photo');
function edit($id = null)
{
$this->authorize();
if(!($photo = $this->Photo->findById($id)))
{
$this->flash('error', ucfirst(i18n::translate('photo not found')));
$this->redirect('/');
}
else
{
$this->authorize($photo['Photo']['user_id']);
$this->set('photo', $photo);
if(empty($this->data))
{
$photo['Photo']['tags'] = array();
foreach($photo['PhotoTag'] as $tag)
$photo['Photo']['tags'][] = $tag['tag'];
$photo['Photo']['tags'] = implode(',', $photo['Photo']['tags']);
$this->data = $photo;
}
else
{
// foreach(explode(',', $this->data['Photo']['tags']) as $tag)
foreach(preg_split("/[s]*[,][ s]*/", $this->data['Photo']['tags']) as $tag)
{
$tag = strtolower(rtrim($tag)); //trims whitespace at end of tag
if(!empty($tag))
{
$found = false;
for($i = 0; $i < count($photo['PhotoTag']); $i++)
{
if(isset($photo['PhotoTag'][$i]) && $photo['PhotoTag'][$i]['tag'] == $tag)
{
$found = true;
unset($photo['PhotoTag'][$i]);
break;
}
}
if(!$found)
{
$this->PhotoTag->create();
$this->PhotoTag->save(array('PhotoTag' => array('photo_id' => $photo['Photo']['id'], 'tag' => $tag)));
}
}
}
foreach($photo['PhotoTag'] as $tag)
$this->PhotoTag->delete($tag['id']);
$this->flash('valid', ucfirst(i18n::translate('tags changed')));
$this->redirect('/photos/show/' . $photo['User']['username'] . '/' . $photo['Photo']['id']);
}
}
}
function ajax_edit($id = null) {
$this->authorize();
if(!($photo = $this->Photo->findById($id)))
{
die();
}
else
{
$this->authorize($photo['Photo']['user_id']);
// foreach(explode(',', $this->params['form']['value']) as $tag)
foreach(preg_split("/[s]*[,][ s]*/", $this->params['form']['value']) as $tag)
{
$tag = strtolower(rtrim($tag));
if(!empty($tag))
{
$found = false;
for($i = 0; $i < count($photo['PhotoTag']); $i++)
{
if(isset($photo['PhotoTag'][$i]) && $photo['PhotoTag'][$i]['tag'] == $tag)
{
$found = true;
unset($photo['PhotoTag'][$i]);
break;
}
}
if(!$found)
{
$this->PhotoTag->create();
$this->PhotoTag->save(array('PhotoTag' => array('photo_id' => $photo['Photo']['id'], 'tag' => $tag)));
}
}
}
foreach($photo['PhotoTag'] as $tag)
$this->PhotoTag->delete($tag['id']);
echo $this->params['form']['value'];
die();
}
}
}
?>
問題を理解するために必要なすべてのコードはありますか?関連コードのみを含めてください。 –
このコードサンプルのほとんどは無関係です。問題を引き起こしているキーワード処理部分のみを表示して、「綿毛」を編集できますか? –
あなたの正規表現 '[s] * [、] [s] *'は、0文字以上の文字 's'にマッチし、その後にカンマが続き、その後に0以上の[スペースまたは文字s]が続きます。 '\ s'は"スペース文字 "を意味します。スラッシュは重要です。そして、 '[]'は単一の文字の周りには必要ありません。それらは文字セットを表します。おそらく、あなたは正規表現をブラッシュアップするべきでしょうか? – mpen