以前リクエストをいただいた物件の路線検索に対応しました。
不動産物件管理系の他の更新などとまとめて紹介いたします。
これまで提供してきた駅による検索に加え、路線による検索・絞り込み機能を追加しました。
この機能は、
ご利用いただけます。
また、この路線と「駅ー関係」の関係を「都道府県ー市区町村」にも適用し、都道府県名による検索・絞り込み機能も追加しました。
次のように、物件検索ブロックの「検索項目」で「交通」を選択することで、駅が路線によってグループ化され、路線名をチェックすることで駅を丸ごと選べるようになります。
同じように、都道府県名をチェックすることで都道府県を丸ごと選べます。
次のように、物件表示ブロックの抽出条件の「交通」欄が路線によってグループ化表示され、条件として路線名を選べるようになりました。路線を抽出条件とすることで、該当の路線沿い(該当の路線を選択している)物件がすべて抽出されます。
同じように、都道府県を抽出条件とすることで、該当の都道府県下の物件がすべて抽出されます。
次のように、物件検索ボタンブロックの検索条件の「交通」欄が路線によってグループ化表示され、検索条件として路線名が選べるようになりました。路線を検索条件とすることで、ボタンのクリック時に該当の路線に一致する物件が絞り込まれます。
各路線ごとにボタンを用意することで、「路線切替ボタン」のように利用できます。
同じように、都道府県を検索条件とすることで、ボタンのクリック時に該当の都道府県下の物件が絞り込まれます。
物件表示ブロック・物件検索ボタンブロックなど一部のブロックを編集する際に、
が発生していましたので、これらを修正しました(iframe方式を廃止)。
これにより、iPhoneやiPadなどからより快適に操作が可能です。
アルファベット順のソートにより
1DK、1K、1LDK、1R、1SLDK
となっていたのを
1R、1K、1DK、1LDK、1SLDK
としました。
間取は「数字+記号」の組合せです。
記号がアルファベット順でかまわない場合は○○や○○などのネイティブ関数でソートが可能です。
しかし、今回の間取のようにルールに則った順番変更をしたい場合は工夫が必要です。
今回は次のようにしてソートを実行しました。
間取を点数化し、uasort関数を使って点数順に並び替えをします。
点数は2桁とし、10の位は部屋数、1の位は次の配列のように0~8までの数字を割り振って自由に定義します。
$room2score = array(
"R"=>1,
"ルーム"=>2,
"K"=>3,
"DK"=>4,
"LDK"=>5,
"SLDK"=>6,
);
次に、
$score = preg_match("/^(\d+)(.+)?$/", mb_convert_kana($label, "a", "UTF-8"), $tmp) ? $tmp[1]*10 + ($tmp[2] && $room2score[$tmp[2]] ? $room2score[$tmp[2]] : 9) : 1000
のようにして、1LDKのような間取の文字列を点数化します。
ここでは、正規表現によって先頭の数字とそれ以外に分離し、先頭の数字(部屋数)を10倍(10の位)、それ以下を上で定義した配列に則って1の位に割り当てます。これにより例えば、
1R・・・11
1ルーム・・・12
1K・・・13
1SLDK・・・16
1DK+S(未定義の間取)・・・19
2R・・・20
不明(部屋番号のない未定義の間取)・・・1000
と点数化されます。
実際はこの計算はループで行い、点数を配列に挿入します。
以上で、
$arr = array(
"1DK",
"2LDK",
);
のような関数が
$arr = array(
"1DK"=>14,
"2LDK"=>25,
);
のような点数付きの関数となります。
これを
asort($arr);
のようにしてネイティブ関数でソートをすれば完成です。
他の値を保持するため、
$arr = array(
array("label"=>"1DK", "score"=>14),
array("label"=>"2LDK", "score"=>25),
);
のような多重の連想配列になった場合は、ユーザー定義関数でソートするuasortを利用して次のようにしましょう。
function myfunc($a, $b) {
return $a["score"] == $b["score"] ? 0 : ($a["score"] > $b["score"] ? 1 : -1);
}
uasort($arr, "myfunc");