JPEG, GIF, PNG

写真画像ならJPEGが一般的、非可逆圧縮の画像フォーマット
256色以下ならGiF ロゴ、ボタン、イラストなど
PNG 可逆圧縮の画像形式、背景透過も可能、ウェブ用として有用

画像ファイルの中から複数の古い画像を削除する

まず、最初の状態。
6毎の画像があります。

<?php

//画像一覧んを取得
foreach(glob('img/*') as $file){
	if(is_file($file)){
		$file_list&#91;&#93; = $file;
		// $file_list&#91;&#93; = str_replace('img/', '', $file);
	}
}

//ファイル名でソート
sort($file_list);
var_dump($file_list);

echo '<br>';

//古いファイルを切り出す
$result = array_slice($file_list, 0, 3);
var_dump($result);

//取得したファイルをunlinkで削除
foreach($result as $value){
		unlink($value);
}

//結果を表示
foreach(glob('img/*') as $file){
	if(is_file($file)){
		$file_list[] = $file;
	}
}
sort($file_list);
var_dump($file_list);

結果

なるほど、なんとなく見えてきましたね。

unlink()でファイル削除

まず初期状態

unlinkを使います。

<?php

unlink('sample.txt');
unlink('03.jpeg');
?>

削除されました。なるほど。

複数のファイル削除は、glob関数

<?php

foreach(glob('*.jpeg') as $file){
		unlink($file);

		echo $file.'を削除しました。<br>';
}
?>

特定フォルダのファイル名一覧の取得もglobでok

<?php

foreach(glob('img/*') as $file){
	if(is_file($file)){
		$file_list&#91;&#93; = str_replace('img/', '', $file);
	}
}

var_dump($file_list);
?>

array(3) { [0]=> string(17) “20180331-City.jpg” [1]=> string(19) “20180331-Cuisse.jpg” [2]=> string(19) “20180331-Nomura.jpg” }

配列の画像パスをフォルダに格納

foreachで回し、パスをユニークにします。

<?php

$img = array(
	"01.jpeg",
	"02.jpeg",
	"03.jpeg"
	);

$i=0;
foreach($img as $value){
    $pass = "img/" . $i . ".jpeg";
	file_put_contents($pass, $value);
	$i++;
}
?>

おお、どうやら行けそうですね。

では、連想配列ではどうでしょうか?
日付を加えてみます。

<?php

$date = date("Ymt");

$img = array(
	'Nomura'=>'01.jpeg',
	'Cuisse'=>'02.jpeg',
	'City'=>'03.jpeg'
	);

foreach($img as $key => $value){
    $pass = "img/" .$date. "-". $key . ".jpg";
	file_put_contents($pass, $value);
}
?>

問題ないです。

file_put_contents()でテキストを追記

テキストを書き込む場合も、画像と同じ要領です。

<?php
$short = '2018/02/26	Credit Suisse Securities	0.470%	-0.150%	42,700株	-13,300\n';

file_put_contents("sample.txt", $short);
?>

書き込まれました。

追加する場合は、第三引数にFILE_APPENDとします。

<?php

$short = "2018/02/27	Nomura International	5.940%	+0.250%	535,100株	+22,700\r\n";

file_put_contents("sample.txt", $short, FILE_APPEND);
?>

上手く追加されてますね。

ではテキストを配列で持っていた場合はどうでしょうか? foreachで回してみます。

<?php
$short = array(
	"2018/02/21	Nomura International	5.230%	+0.120%	471,100株	+10,800\r\n",
	"2018/02/22	Nomura International	6.020%	+0.790%	542,500株	+71,400\r\n",
	"2018/02/23	Nomura International	6.160%	+0.140%	555,100株	+12,600\r\n"
	);
foreach($short as $value){
	file_put_contents("sample.txt", $value, FILE_APPEND);
}
?>

おおお、入ってますね。少し感動しました。

file_put_contents()

東証の写真

file_get_contentsで取得した画像を、指定のフォルダに名前を付けて画像に置き換えます。

<?php

$img = '01.jpeg';
$data = file_get_contents($img);

$pass='img/sec.jpg';
file_put_contents($pass,$data);
?>

実行すると、ファイルが出来ています。$imgのパスは外部サーバーでも同じです。
gif-> jpgでもできました。

pdoでテーブルのデータを削除する

まず、mysqlにデータを入れます。

mysql> insert into kabuki(name, lat, lng) values('歌舞伎町店', '35.6969674', '139.700469');
Query OK, 1 row affected (0.10 sec)

mysql> select * from kabuki;
+-----------------+-----------+------------+
| name            | lat       | lng        |
+-----------------+-----------+------------+
| 歌舞伎町店      | 35.696967 | 139.700469 |
+-----------------+-----------+------------+
1 row in set (0.05 sec)

pdo exec(‘TRUNCATE TABLE kabuki’)でデータを削除します。

<?php

$dsn = "mysql:dbname=map;host=localhost";
$user = "hoge";
$password = "hogehoge";
 
try {
    $dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e){
    print('connection failed:'.$e->getMessage());
}

$dbh->exec('TRUNCATE TABLE kabuki');
?>

削除されてますね。

mysql> select * from kabuki;
Empty set (0.10 sec)

お店のカテゴリごとにアイコンを変えてぐるなびapiとgoogle mapを繋げようとしたが…

これは駄目だ。。本家(google)に勝てない。あかんわ。

<?php

$uri = "http://api.gnavi.co.jp/RestSearchAPI/20150630/";
$acckey = "donot watch";
$format="json";

$lat   = 35.6952455;
$lon   = 139.704177;
$range = 2;

$url  = sprintf("%s%s%s%s%s%s%s%s%s%s%s%s", $uri, "?format=", $format, "&keyid=", $acckey, "&latitude=", $lat,"&longitude=",$lon,"&range=",$range,"&hit_per_page=100");

// print_r($url);

$json = file_get_contents($url);
$obj  = json_decode($json);

foreach($obj->rest as $value){
	$name[] = $value->name;
	$cate[] = $value->category;
	$glat[] = $value->latitude;
	$glng[] = $value->longitude;
	$gurl[] = $value->url;

}
// print_r('<pre>');
// var_dump($obj);
// print_r('</pre>');
$glat = json_encode($glat);
$glng = json_encode($glng);
$shop = json_encode($name);
$cate = json_encode($cate);
$url = json_encode($gurl);

?>
<style>
#ginza {
		height: 70%;
		width: 100%;
        font-size:small;
	}
	html, body {
		height: 100%;
		margin: 0;
		padding: 0;
	}
</style>
繁華街<br>
新宿 歌舞伎町 風鈴会館周辺
<div id="ginza"></div>
<script>
var map;
var marker = [];
var infoWindow = [];
var icon00 = 'img/00.png';var icon01 = 'img/01.png';var icon02 = 'img/02.png';var icon03 = 'img/03.png';var icon04 = 'img/04.png';var icon05 = 'img/05.png';var icon06 = 'img/06.png';var icon07 = 'img/07.png';var icon08 = 'img/08.png';var icon09 = 'img/09.png';var icon10 = 'img/10.png';var icon11 = 'img/11.png';var icon12 = 'img/12.png';var icon13 = 'img/13.png';var icon14 = 'img/14.png';var icon15 = 'img/15.png';var icon16 = 'img/16.png';var icon17 = 'img/17.png';var icon18 = 'img/18.png';var icon19 = 'img/19.png';var icon20 = 'img/20.png';var icon21 = 'img/21.png';


function initMap(){
    var mapLatLng = new google.maps.LatLng({ lat: <?php echo $lat; ?>, lng: <?php echo $lon; ?>});
    map = new google.maps.Map(document.getElementById('ginza'),{
        center: mapLatLng,
        zoom: 19
    });

    var lat_array = JSON.parse('<?php echo $glat; ?>');
    var lng_array = JSON.parse('<?php echo $glng; ?>');
    var shop = JSON.parse('<?php echo $shop; ?>');
    var cate = JSON.parse('<?php echo $cate; ?>');
    var url = JSON.parse('<?php echo $url; ?>');
    console.log(lng_array);

    for(var i=0; i < 101; i++){
        markerLatLng = new google.maps.LatLng({lat: Number(lat_array&#91;i&#93;), lng: Number(lng_array&#91;i&#93;)});
        marker&#91;i&#93; = new google.maps.Marker({
            position: markerLatLng,
            label: shop&#91;i&#93;, 
            map: map
        });

        infoWindow&#91;i&#93; = new google.maps.InfoWindow({
            content: '<a href="' + url&#91;i&#93;+ '">' + shop[i] + '</a>'
        });

        switch (cate[i]){
           case '居酒屋':case'日本酒バー':case'晩酌居酒屋':case'和食寿司居酒屋/酒場':marker[i].setOptions({icon: {url: icon00}});break;
           case 'カフェ':marker[i].setOptions({icon: {url: icon01}});break;
           case 'バー':case'ワイン':case'パワーストーンバー':case'ダイニングバー':case'大人の隠れ家バー':case'カフェダイニング バー':case'シャンパン・ワイン':marker[i].setOptions({icon: {url: icon02}});break;
           case 'そば':marker[i].setOptions({icon: {url: icon03}});break;
           case 'ラーメン':marker[i].setOptions({icon: {url: icon04}});break;
           case '日本料理':case'創作料理':case'旬の串揚げ・和食':case'小料理':case'鮨 和食':case'鮨 和食':marker[i].setOptions({icon: {url: icon05}});break;
           case '寿司':case'寿司屋':marker[i].setOptions({icon: {url: icon06}});break;
           case '天ぷら':marker[i].setOptions({icon: {url: icon07}});break;
           case '海鮮料理':marker[i].setOptions({icon: {url: icon08}});break;
           case 'おでん':case'焼鳥 鶏料理':case'焼き鳥':marker[i].setOptions({icon: {url: icon09}});break;
           case 'お好み焼き':marker[i].setOptions({icon: {url: icon10}});break;
           case 'カレー':marker[i].setOptions({icon: {url: icon11}});break;
           case 'イタリアン':case'薪焼きイタリアン':marker[i].setOptions({icon: {url: icon12}});break;
           case '中華料理':marker[i].setOptions({icon: {url: icon13}});break;
           case 'タイ料理':case'ベトナム料理':case'ネパール料理':marker[i].setOptions({icon: {url: icon14}});break;
           case 'フレンチ':case'ビストロ':case'ワインビストロ':case'フレンチ ビストロ':case'鉄板焼きダイニング':case'フレンチレストラン':marker[i].setOptions({icon: {url: icon15}});break;
           case '焼肉':case'野菜×鉄板焼き':case'ホルモン':case'鉄板鍋・牛タン・ワイン':marker[i].setOptions({icon: {url: icon16}});break;
           case 'ハンバーガー':marker[i].setOptions({icon: {url: icon17}});break;
           case 'デザート':case'和菓子':case'パンケーキカフェ':marker[i].setOptions({icon: {url: icon18}});break;
           default:marker[i].setOptions({icon: {url: icon19}});break;
        }
        markerEvent(i);
    }
    
}
function markerEvent(i){
    marker[i].addListener('click', function(){
        infoWindow[i].open(map, marker[i]);
    });
}
</script>

条件分岐でgoogle mapのiconを変える

コンサル会社で、外資系のコンサルだけアイコンを変えてみます。
アイコンはsetOptionで変えます。
setOptions({
icon: {
url: icon
}
});

var map;
var marker = [];
var infoWindow = [];
var icon = 'icon.png';
var markerData = [
  {
       name: 'マッキンゼー',
       ref: '外資',
       lat: 35.6636921,
    lng: 139.7418055
 }, {
        name: 'ベイン',
        ref: '外資',
     lat: 35.6661276,
        lng: 139.7312397
 }, {
        name: 'アビーム',
        ref: '外資',
     lat: 35.6844514,
      lng: 139.764942
 }, {
        name: 'ボスコン',
        ref: '外資',
        lat: 35.6811759,
        lng: 139.734872
 }, {
        name: '野村総研',
        ref: '国内',

     lat: 35.6884676,
     lng: 139.7645002
 }, {
        name: 'MUFJリサーチ',
        ref: '国内',
       lat: 35.6618341,
     lng: 139.7443247
 }
];

function initMap(){
    var mapLatLng = new google.maps.LatLng({ lat: markerData[0]['lat'], lng: markerData[0]['lng']});
    map = new google.maps.Map(document.getElementById('sample'),{
        center: mapLatLng,
        zoom: 14
    });

    for(var i=0; i < markerData.length; i++){
        markerLatLng = new google.maps.LatLng({lat: markerData&#91;i&#93;&#91;'lat'&#93;, lng: markerData&#91;i&#93;&#91;'lng'&#93;});
        marker&#91;i&#93; = new google.maps.Marker({
            position: markerLatLng,
            map: map
        });

        infoWindow&#91;i&#93; = new google.maps.InfoWindow({
            content: '<div class="sample">' + markerData[i]['name'] + '</div>'
        });

        if(markerData[i]['ref'] == '外資'){
            marker[i].setOptions({
                icon: {
                    url: icon
                }
            });
        }
        markerEvent(i);
    }
    
}

function markerEvent(i){
    marker[i].addListener('click', function(){
        infoWindow[i].open(map, marker[i]);
    });
}

なるほど、大分わかってきましたね。