【PHP】簡易型サイト内検索のサンプルコード

データベースを使わないで簡単にサイト内検索の機能を実装する。

サイト内検索

まず、サイト内検索の機能を実装したいページに、フォームを挿入する。

<form id="form" name="form" method="post" action="result.php">
	<input class="newInput" type="text" id="text" name="text" size="50" value="">
	<input type="submit" id="val" value="送信" />
</form>

次に検索結果ページ(ここではresult.php)を新規作成し、検索結果を出力したい部分に下記のPHPタグを挿入する。
初期設定欄は導入するサイトに応じて設定する。

【result.php】

<?php
	require_once('common.php');		//プログラムファイルパス
	// 初期設定 --------------------------------------------------------
	$str = $_POST['text'];			
	$pass = "http://www.ore-memo.com/";	//サイトURL
	$csvFileName = "search.csv";		//CSVファイル名
	// -----------------------------------------------------------------
	
	// サイト内検索でリンクを出力する関数
	funcSiteLink($str, $pass, $csvFileName);
?>

プログラムファイル(ここではcommon.phpという名前)を新規作成し、下記のコードをコピぺ保存する。
検索結果ページと別階層に保存する場合は、検索結果ページに挿入したPHPタグ内の
require_once(‘common.php’);にrequire_once(‘filename/common.php’);と階層を追加する。

【common.php】

<?php
////////////////////////////////////////////////////////////////////
// サイト内検索でリンクを出力する関数
// funcRepeated(検索文字列, URL名, csvファイル名);
////////////////////////////////////////////////////////////////////
function funcSiteLink($str, $pass, $csvFileName){
	if($str){
		// 全角スペースを半角スペースに置換
		$keyword = mb_convert_kana($str, "s","SJIS");
		
		// キーワードを配列に入れる
		$arr_keyword = preg_split('/[\s]+/', $keyword, -1, PREG_SPLIT_NO_EMPTY);
		// csvファイルを開く
		$file = fopen($csvFileName,"r");
		
		$i = 0;
		while(!feof($file)){
			$csv = fgets($file);
			
			//csvファイルを配列に格納
			$str = explode(",", $csv);	
			$keywordPassArr[$i] = $str;
			$i++;	
		}
		
		$judg = 0;
		foreach($arr_keyword as $val){
			// 配列分処理
			foreach($keywordPassArr as $kpa){
				preg_match("/$val/", $kpa[0], $matches, PREG_OFFSET_CAPTURE);
				if($matches[0][1] === 0){
					echo '<p><a href="'.$pass .$kpa[1] .'">' .$kpa[0] .'</a></p>';
					$judg++;
				}
			}
		}
		// 該当がない場合の処理
		if($judg === 0){
			echo "<p>該当するキーワードがありませんでした</p>";
		}
		fclose($file);
	}else{
		echo "<p>キーワードを入力してください</p>";
	}
}
?>

最後にテキストエディタなどでcsvファイル(ここではsearch.csv)を新規作成し、
「検索文字,表示ファイル」という形式で検索キーワードを追加していく。

【search.csv】

東京,tokyo.html
神奈川,kanagawa.html
千葉,chiba.html
埼玉,saitama.html
横浜,kanagawa/yokohama.html

このファイルに記述したキーワードが検索されると、
検索結果ページにキーワードに指定したURLへのリンクが出力される。

【Android】getResourcesメソッドを使って変数名からリソースIDを取得する

動的な値によって、表示したいリソース(データ等)を変化させたい場合、

set○○○○○(R.○○○○○.○○○○○);

でリソースIDを固定する事ができない。

こういった場合、変数名からリソースIDを取得する必要がある。
getResourcesメソッドを利用してリソースID名を変数化してからリソースを取得する。

int strId = 
getResources().getIdentifier("リソースID名", "データ型", "パッケージ名");

【getResourcesメソッド使用例】

String text_name = "id" + 1;
int strId = 
getResources().getIdentifier("text_name", "id", getPackageName());
TextView put_txt = (TextView)findViewById(strId);
put_txt.setText("東京都");

【Photoshop】つやアイコンの作り方

今回は、アイコンにツヤを付けてみます。

つやアイコン

まず、Photoshopを起動します。
[楕円形選択ツール]などでツヤを付けたい部分の選択範囲をつくります。

楕円形選択ツールで選択範囲

次に、新規レイヤーを作成し、新規レイヤーを選択した状態で、[塗りつぶしツール]を使って、先ほどの選択範囲内を白(#ffffff)で塗りつぶします。

塗りつぶしツール

いったん白で塗りつぶしたレイヤーを非表示にして、アイコンのレイヤーを選択した状態でアイコンの選択範囲を作成します。
今回は単色なので[選択範囲]→[色域指定](許容量:0)で選択範囲をとります。

アイコンの選択範囲

再び、白で塗りつぶしたレイヤーを表示して、そのレイヤーを選択した状態でレイヤーウィンドウの[レイヤーマスクを追加]をクリックします。

レイヤーマスク

すると、白の楕円がアイコンの型でくりぬかれた形になります。
あとは、レイヤーウィンドウで不透明度を調整(今回は20)すれば完成です。

つやアイコン完成画像

つやアイコン完成画像

【CSS3】メディアクエリ指定でデバイスの横幅ごとに表示を切り替える

CSS3ではユーザのブラウザやデバイスの情報を取得することができるようになり、それに対応したスタイルの適用が可能になった。
これにより、ひとつのHTMLファイルで複数のデバイスに対応できるようになった。

CSS3のメディアクエリ(@media)を使ってデバイスの横幅ごとにデザインを切り替えてみる。
今回は、1,000px以上をPC・タブレット(横)、1,000px以下をタブレット(縦)、480px以下をスマートフォン(横)(縦)と想定してスタイルを指定してみる。

/* 基本値 1001px以上(PC・タブレット横) */
div#contents {

}
/* 480px以上、1000px以下(タブレット縦) */
@media screen and (min-width: 481px) and (max-width: 1000px) {
	div#contents {

	}
}
/* 480px以下(スマートフォン縦・横) */
@media screen and (max-width: 480px) {
	div#contents {

	}
}

実際に試してみる。
【index.html】

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="content-style-type" content="text/css">
<title>title</title>
<link rel="stylesheet" href="css/common.css">
<link rel="stylesheet" href="css/reset.css">
</head>
<body>
<!-- page content -->
<div id="contents">
<h1><img src="img/common/img_head.gif" width="100%"/></h1>
	<ul id="main_menu">
		<li class="mainMenu">メニュー1</li>
		<li class="mainMenu">メニュー2</li>
		<li class="mainMenu">メニュー3</li>
		<li class="mainMenu">メニュー4</li>
		<li class="mainMenu">メニュー5</li>
		<li class="mainMenu">メニュー6</li>
		<li class="mainMenu">メニュー7</li>
		<li class="mainMenu">メニュー8</li>
		<li class="mainMenu">メニュー9</li>
		<li class="mainMenu">メニュー10</li>
	</ul>
</div>
</body>
</html>

【common.css】

/* 基本値 1001px以上(PC・タブレット横) */
div#contents {
	width: 980px;
	margin: auto;
}
ul#main_menu {
	display: block;
	width: 100%;
	height: 50px;
}
ul#main_menu li.mainMenu{
	display: block;
	float: left;
	color: #FFFFFF;
	width: 10%;
	height: 50px;
	line-height: 50px;
	background: #000000;
	text-align: center;
}
/* 480px以上、1000px以下(タブレット縦) */
@media screen and (min-width: 481px) and (max-width: 1000px) {
	div#contents {
		width: 100%;
	}
	ul#main_menu li.mainMenu{
		width: 20%;
		height: 50px;
		line-height: 50px;
		background: #0000FF;
	}
}
/* 480px以下(スマートフォン縦・横) */
@media screen and (max-width: 480px) {
	div#contents {
		width: 100%;
	}
	ul#main_menu li.mainMenu{
		width: 50%;
		height: 50px;
		line-height: 50px;
		background: #FF0000;
	}
}

【実行結果】

メディアクエリ

ウィンドウの横幅を縮めると、ウィンドウの横幅に応じてそれぞれ指定したスタイルが適応される。

【PHP】func_get_args関数を使って関数の引数を取得する

func_get_args関数を使って関数の引数を取得してみます。

funcGetArgsTest("aaa", "bbb", "ccc");

function funcGetArgsTest()
{
    $args = func_get_args();
    print_r($args);
}

出力結果

Array ( [0] => aaa [1] => bbb [2] => ccc ) 

ついでに変数代入バージョンも試してみた

//変数代入バージョン
$a = "aaa";
$b = "bbb";
$c = "ccc";

funcGetArgsTest($a, $b, $c);

function funcGetArgsTest()
{
    $args = func_get_args();
    print_r($args);
} 

【出力結果】

Array ( [0] => aaa [1] => bbb [2] => ccc ) 

変数代入バージョンもちゃんと変数を展開してくれて問題なくいけた。

【PHP】preg_match関数で正規表現を使って複数の値を配列に入れる

preg_match関数で正規表現を使って複数の値を配列に入れます。

今回はA○B48の篠田麻○子さんのプロフィールを配列に入れてみます。

<?php
	// 元の文字列
	$size = "168/87(E).57.85";

	// preg_match関数でマッチした値を配列に入れる
	preg_match("/([0-9]*)\/([0-9]*)\(([A-Za-z])\)\.([0-9]*)\.([0-9]*)/", $size, $match);

	// 配列の中身を確認
	print_r($match);
?>

【補足】
配列に入れたい(抜き出したい)部分を()で囲みます。
[0-9]は0から9までの数字全部という意味です。
[0-9]*のさいごの”*”は直前の文字が1つ以上連続するという意味です。
[A-Za-z]はaからz、AからZのアルファベット全部という意味です。

【出力結果】

Array ( [0] => 168/87(E).57.85 [1] => 168 [2] => 87 [3] => E [4] => 57 [5] => 85 ) 

【PHP】array_multisort関数で多次元配列をソート(並び替え)する

常の配列のソート(並び替え)はasort()などを使いますが、
多次元配列の場合array_multisort()を使用します。

今回は、京都府・大阪府・兵庫県の順番を電話番号順に並び替えようとおもいます。

まず、配列に値を代入します。
$dataArr配列の中に都道府県のデータ配列を入れて二次元配列にします。

次に、ソートする準備をします。
ここでソートする際の基準となる配列をつくります。

最後にarray_multisort関数で完了

<?php
	// 1.配列をに代入
	$dataArr[] = array("pref" => "京都府", "city" => "京都市", "tel" => "075");
	$dataArr[] = array("pref" => "大阪府", "city" => "大阪市", "tel" => "06");
	$dataArr[] = array("pref" => "兵庫県", "city" => "神戸市", "tel" => "078");

	// 2.配列をソートする準備
	foreach($dataArr as $key => $row){
		$sort[$key] = $row["tel"];
	}

	// 3.配列をソート
	array_multisort($sort, SORT_ASC, $dataArr);

	// 4.配列を出力
	print_r($dataArr);
?>

■ソート方法指定フラグ
SORT_ASC – 昇順にソート
SORT_DESC – 降順にソート

■ソート型のフラグ
SORT_REGULAR – 普通に比較
SORT_NUMERIC – 数値的に比較
SORT_STRING – 文字列として比較

【出力結果】

Array (
 [0] => Array ( [pref] => 大阪府 [city] => 大阪市 [tel] => 06 )
 [1] => Array ( [pref] => 京都府 [city] => 京都市 [tel] => 075 )
 [2] => Array ( [pref] => 兵庫県 [city] => 神戸市 [tel] => 078 )
) 

京都府・大阪府・兵庫県 → 大阪府・京都府・兵庫県
の順に並び変わりました。

【Android】ScrollViewでスクロール部分の影の長さを指定する。

ScrollViewでスクロール部分で隠れた部分の影の長さを指定したい場合、
android:fadingEdgeLengthで長さを指定する。

<ScrollView
	android:id="@+id/scroller"
	android:layout_width="fill_parent"
	android:layout_height="wrap_content"
	android:fadingEdgeLength="300dip"
	android:background="@drawable/background">  
	<LinearLayout
		android:id="@+id/content"
		android:layout_width="fill_parent" 
		android:layout_height="fill_parent"
		android:orientation="vertical"
		android:baselineAligned="true"
		android:background="@drawable/back_img_repeat">
	</LinearLayout>  
</ScrollView>

【出力結果】
左)android:fadingEdgeLength:指定なし
右)android:fadingEdgeLength=”300dip”

android:fadingEdgeLength