MySQLに接続し、データベースを作成

mysql -u root -p で接続します。

[vagrant@localhost api]$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 5.6.34 MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

次に、データベースをつくります。今回は、”sample”。

mysql> create database sample;
Query OK, 1 row affected (0.11 sec)

テーブルを作成する。

mysql> use  sample;
Database changed
mysql> show tables;
Empty set (0.00 sec)

mysql> create table sample.words(
    ->  id int,
    ->  word1 varchar(255),
    ->  word2 varchar(255),
    ->  word3 varchar(255),
    ->  word4 varchar(255),
    ->  word5 varchar(255),
    ->  word6 varchar(255),
    ->  word7 varchar(255),
    ->  word8 varchar(255),
    ->  word9 varchar(255),
    ->  word10 varchar(255)
    -> );
Query OK, 0 rows affected (0.27 sec)

mysql> show tables;
+------------------+
| Tables_in_sample |
+------------------+
| words            |
+------------------+
1 row in set (0.00 sec)

データを挿入します。

mysql> insert into sample.words values
    -> (1, 'ワード01','ワード02','ワード03','ワード04','ワード05','ワード06','ワード07','ワード08','ワード09','ワード10'),
    -> (2, 'ワード11','ワード12','ワード13','ワード14','ワード15','ワード16','ワード17','ワード18','ワード19','ワード20'),
    -> (3, 'ワード21','ワード22','ワード23','ワード24','ワード25','ワード26','ワード27','ワード28','ワード29','ワード30');
Query OK, 3 rows affected (0.07 sec)
Records: 3  Duplicates: 0  Warnings: 0

テーブルのカラムを表示
desc words;
テーブルの中身を表示
select * from words;

中国語(ISO 3166-1 alpha-2:cn)の文字コード

中国語には繁体字と簡体字があり、繁体字は主に台湾、簡体字は主に本土で使われている。
character set
繁体字:big5
簡体字:GB2312 (EUC_CN)

では、文字コードはどう使われているのでしょう?

国工商银行

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>欢迎光临中国工商银行东京网站</title>
<META name="ICBCChannel" content="海外分行">

Agricultural bank of china

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
    <title>中国农业银行</title>

中国银行
Bank of china

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>中国银行全球门户网站</title>
<meta content="中国银行,中行,银行,保险,基金管理,直接投资,投资管理,飞机租赁,外汇,理财,金融,网上银行,网银,电子银行,手机银行,公司金融,个人金融,银行卡" name="keywords" />

どこもcharsetはutf-8で問題なさそうです。

shuffle関数と配列の重みづけ

配列を重みづけしてシャッフルしたいと思います。

まず、単純な配列のシャッフル。

<?php

$arr = array('SBI証券','楽天証券','カブドットコム証券','松井証券','マネックス証券','岡三オンライン証券','GMOクリック証券','ライブスター証券');

shuffle($arr);
echo $arr&#91;0&#93;. "にしました。";

?>

岡三オンライン証券にしました。

重みづけの関数。

<?php


$arr = array(
	'SBI証券' => 30,
	'楽天証券' => 30,
	'カブドットコム証券' => 5,
	'松井証券' => 5,
	'マネックス証券' => 15,
	'岡三オンライン証券'=> 5,
	'GMOクリック証券' => 5,
	'ライブスター証券' => 5
);

function array_rand_weighted($entries){
	$sum = array_sum($entries);
	$rand = rand(1, $sum);

	foreach($entries as $key => $weight){
		if(($sum -= $weight) < $rand) return $key;
	}
}

$sec = array_rand_weighted($arr);
echo $sec. "にしました。";

?>

ああ、ダメだ。
やりたいのは、シャッフルした後の配列の順番の重みづけなので全然違いますね。これではどうでしょう?
係数とランダムな数を掛け合わせて、ソートします。

<?php

$min = 1;
$max = 10;

$arr = array(
	'SBI証券' => 30,
	'楽天証券' => 30,
	'カブドットコム証券' => 5,
	'松井証券' => 5,
	'マネックス証券' => 15,
	'岡三オンライン証券'=> 5,
	'GMOクリック証券' => 5,
	'ライブスター証券' => 5
);

foreach($arr as $key => $weight){
		$result[$key] = $weight * mt_rand($min, $max);
}
arsort($result);
var_dump($result);

?>

array(8) { [“楽天証券”]=> int(270) [“SBI証券”]=> int(120) [“マネックス証券”]=> int(60) [“ライブスター証券”]=> int(45) [“松井証券”]=> int(45) [“岡三オンライン証券”]=> int(30) [“GMOクリック証券”]=> int(20) [“カブドットコム証券”]=> int(15) }

値はさておき、近いのではないでしょうか。
$minと$maxの値を狭めることで、ボラティリティを低くできると思います。

条件分岐で先頭の文字を削除する

strstr最速といわれていますが、ここでは先頭の文字を判別すのに、preg_matchを使います。

<?php

$bank = '株式会社三井住友銀行';
if(preg_match("/銀行/", $bank)){
	echo $bank. "は銀行です。";
}

$word = array('株式会社三井住友銀行','ソニー銀行株式会社','シティバンク、エヌ・エイ東京支店');
foreach($word as $value){
	if(preg_match("/^株式会社/", $value)){
		echo $value. "は前株です。<br>";
	} elseif(preg_match("/株式会社$/", $value)) {
		echo $value. "は後ろ株です。<br>";
	} else {
		echo $value. "は株式会社ではありません。<br>";
	}
}

株式会社三井住友銀行は銀行です。
株式会社三井住友銀行は前株です。
ソニー銀行株式会社は後ろ株です。
シティバンク、エヌ・エイ東京支店は株式会社ではありません。

先頭文字を削除する

if(preg_match("/^hoge/", $text)){
     $text = ltrim($text, 'hoge');
  }

ISO 3166-1 alpha-2

ISO 3166-1は、IOSによって発行されている国のコード。
alpha-2は、ラテン文字2文字で、alpha-3はラテン文字3文字。


United States 840 USA US
United Kingdom 826 GBR GB
India 356 IND IN
Japan 392 JPN JP
France 250 FRA FR

ロゴはgif、jpg, pngのどれにするべき?

JPG:サイズが小さい、非可逆圧縮、色数が大井、圧縮すると画質が悪くなる、サムネイルなどに適す
PNG:容量が大きい、圧縮しても画質が落ちない、グラフィック画像などに適す
GIF:svgやaiと相性が良い、256色しかない、グレースケール画像・アニメーション・フォント・バナーに適す

JPGは加工に適しておらず、容量優先の際に推奨されています。
画質が求められる場合は、PNGが良いようです。

ロゴはGIFかPNGが良いようです。

$_POSTでスクリプトの送信を制限する

$postをそのまま受け取ると、htmlタグやスクリプトを受け取ってしまいます。

例えば、以下のように、h1タグでhogeを囲って送ると、送られた先のhtmlでhogeがh1で表示されるケースを考えていましょう。

<h1>hoge</h1>

この場合、”htmlspecialchars” postから受け取った値を文字列に変換します。

$_SESSION["hoge"] = htmlspecialchars($_POST["foo"]);

結果、以下のように文字列として値が表示されます。

hoge

topへ戻る:Javascript

#page-top {
    position: fixed;
    bottom: 20px;
    right: 20px;
    font-size: 77%;
  }
  #page-top a {
    background: #EEEEEE;
    color: #fff;
    width: 80px;
    padding: 25px;
    text-align: center;
    display: block;
    border-radius: 5px;
  }
  #page-top a:hover {
    backgorund: rgba(144, 144,144, 0.8);
  }
$(function(){
	var topBtn = $('#page-top');
	topBtn.hide();
	$(window).scroll(function(){
		if($(this).scrollTop() > 450){
			topBtn.fadeIn();
		} else {
			topBtn.fadeOut();
		}
	});
	topBtn.click(function(){
		$('body,html').animate({
			scrollTop: 0
		}, 500);
		return false;
	});
});