- 締切済み
コードをもっとスマートにする方法はありませんか?
PHPを学び始めた者です。 現在自サイトのリンク集を動的に作成しております。 各ページのURLを読み込み特定URL文字があった場合は書き換えを行なっているのですが、数が多くなり(300件以上)コードが増えてきました。 出来るだけ管理しやすくスマートにしたいのですが何か方法ありませんか? ~略~ if(strstr($item['link'], "hoge1.")){ $blog = "<a href=\"http://hoge1.hogehoge.com/\">hoge1さん</a>"; }elseif(strstr($item['link'], "hoge2.")){ $blog = "<a href=\"http://hoge2.test.com/\">hoge2さん</a>"; }elseif(strstr($item['link'], "test3.")){ $blog = "<a href=\"http://test3.hogehoge.com/\">test3さん</a>"; }elseif(strstr($item['link'], "/")){ $blog = "<a href=\"http://#\">未登録</a>"; }; ~略~
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- JaneDue
- ベストアンサー率75% (263/350)
strstr()だと、$item['link']が http://hoge1.com/ とか http://hoge1.ドメイン違い.com/ とかでもHITしちゃうけど、ざっくりと「サブドメインがユーザ名」という規則でかまわないのなら、以下のような方法でも。 //300件のデータを羅列 $users = array( "hoge1" =>"http://hoge1.hogehoge.com/", "hoge2" =>"http://hoge2.test.com/", "test3" =>"http://test3.hogehoge.com/" ); //拾ってきたURL $item['link'] = "http://hoge1.hogehoge.com/xxx/yyy/zzz"; //ドメインの頭抜き出して、登録があれば表示、なければ未登録 $name = preg_replace("#http://(.+?)\..+$#","$1",$item['link']); $blog = $users[$name] ? "<a href=\"{$users[$name]}\">{$name}さん</a>": "<a href=\"http://#\">未登録</a>";
- axuaxua
- ベストアンサー率36% (82/223)
$item['link'] = http://hoge1.com 上の配列を以下にする <a href="http://ato1.com">ほげさん</a> 実行するとsyntax errorが出るかも? 余計な事ですが、こういうことをやるならSQLもセットで覚えると後々楽ですよ //ここは別ファイルで管理する define('URL', '<a href="http://'); function set_data(&$replace){ $replace = array( 'hoge1' => URL . 'ato1.com">ほげ1さん</a>', 'hoge2' => URL . 'ato2.com">ほげ2さん</a>', ); } //ここまで //メイン処理 function replace(&$item){ //置換対象を保持する static $replace = NULL; if(is_null($replace)) set_data($replace); $add = FALSE; foreach($replace as $bef => &$aft){ if(mb_strpos($item['link'], $bef) !== FALSE){ $add = $aft; break; } } if(!$add) $add = "<a href=\"http://#\">未登録</a>"; return $add; }
- Tacosan
- ベストアンサー率23% (3656/15482)
連想配列.
- yambejp
- ベストアンサー率51% (3827/7415)
今回の例だとurlがユーザーごとに違うようなのであまり効率化はできそうに ありませんが、対比表のようなものを作ってforeachで回すとよいかもしれません $blog_conv=array( array("hoge1.","<a href=\"http://hoge1.hogehoge.com/\">hoge1さん</a>") ,array("hoge2.","<a href=\"http://hoge2.test.com/\">hoge2さん</a>") ,array("test3.","<a href=\"http://test3.hogehoge.com/\">test3さん</a>") ,array("/","<a href=\"http://#\">未登録</a>") ); foreach($blog_conv as $array){ if(strstr($item['link'], $array[0])){ $blog=$array[1]; break; } }