• 締切済み

コードをもっとスマートにする方法はありませんか?

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>"; }; ~略~

みんなの回答

  • JaneDue
  • ベストアンサー率75% (263/350)
回答No.4

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)
回答No.3

$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)
回答No.2

連想配列.

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

今回の例だと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; } }

関連するQ&A