Home > アーカイブ > ラボメンバー「shimazaki」の投稿一覧

ラボメンバー「shimazaki」の投稿一覧

投稿タイトル PHPの配列結合の違いについてのまとめ

shimazakiです。

PHPで配列同士を結合する方法をまとめてみました。

array_merge

array array_merge ( array $array1 [, array $array2, ... ] )

特徴:
array1のキーが文字の場合、array2に同じキーがあれば、array2の値によって上書きされる。

<?php
$arr1 = array('k1'=>'v1', 'k2'=>'v2');
$arr2 = array('k1'=>'vv1');
$arr = array_merge($arr1, $arr2);
var_dump($arr);
?>

arr1のk1がarr2のk1によって上書きされている。異なるキーはそのまま後ろに追加される

array(2) {
  ["k1"]=>
  string(3) "vv1"
  ["k2"]=>
  string(2) "v2"
}

ただし、キーが数字の場合は上書きせず、追加する。

<?php
$arr1 = array(10=>'v1', 1=>'v2');
$arr2 = array(10=>'vv1');
$arr = array_merge($arr1, $arr2);
var_dump($arr);
?>

キーが数字の場合は同じキーであっても上書きされず、追加となる。
また、数字のキーは完全に振りなおされる。
数字と文字が混ざった配列の場合でも、数字は振りなおされ、結合される。

array(3) {
  [0]=>
  string(2) "v1"
  [1]=>
  string(2) "v2"
  [2]=>
  string(3) "vv1"
}


array_merge_recursive

array array_merge_recursive ( array array1 [, array ...] )

特徴:
array1のキーが文字の場合、array2に同じキーがあれば、元の要素を配列に変換しarray2の値を追加する

<?php
$arr1 = array('k1'=>'v1', 'k2'=>'v2');
$arr2 = array('k1'=>'vv1');
$arr = array_merge_recursive($arr1, $arr2);
var_dump($arr);
?>

元々のk1の要素が配列になり、arr2のk1の要素が追加される。
その際の添え字は数字となる。

array(2) {
  ["k1"]=>
  array(2) {
    [0]=>
    string(2) "v1"
    [1]=>
    string(3) "vv1"
  }
  ["k2"]=>
  string(2) "v2"
}

ただし、キーが数字の場合はarray_mergeと同じ動作となる。

<?php
$arr1 = array(10=>'v1', 1=>'v2');
$arr2 = array(10=>'vv1');
$arr = array_merge_recursive($arr1, $arr2);
var_dump($arr);
?>

array_mergeと同じ結果。

array(3) {
  [0]=>
  string(2) "v1"
  [1]=>
  string(2) "v2"
  [2]=>
  string(3) "vv1"
}


加算演算子

特徴:
左側に右側を追加する。ただし、同じキーの場合、追加しない

<?php
$arr1 = array('k1'=>'v1',  'k2'=>'v2');
$arr2 = array('k1'=>'vv1', 'k3'=>'vv3');
$arr = $arr1 + $arr2;
var_dump($arr);
?>

同じキーがある場合、array_mergeとは違い、上書きをせず、また、追加もしない。

array(3) {
  ["k1"]=>
  string(2) "v1"
  ["k2"]=>
  string(2) "v2"
  ["k3"]=>
  string(3) "vv3"
}

また、数字であっても上書きもせず、追加もされず、キーも振りなおされない。

<?php
$arr1 = array(10=>'v1', 1=>'v2');
$arr2 = array(10=>'vv1');
$arr = $arr1 + $arr2;
var_dump($arr);
?>
array(2) {
  [10]=>
  string(2) "v1"
  [1]=>
  string(2) "v2"
}

以上です。

配列を加算演算子で扱えるというのが何ともPHPらしいですが、その動きはあんまり加算っぽくないように思います。

投稿タイトル PHPのforeachの不思議

shimazakiです。

PHPで配列処理を行うことの出来るforeachですが、不思議な動作に遭遇しました。

<?php
//配列をセット
$arr = array("a","b","c");

//flag初期化
$flag = true;

//foreach処理開始
foreach( $arr as $value ){

	//?
	print("配列の中身:");
	var_dump( $arr );
	print("<br />n");

	if( $flag ){
		unset( $arr );//配列変数を開放
		$flag = false;
	}

	//?
	print("要素の中身:");
	var_dump( $value );
	print("<br />n");

}
print("最終的な配列の中身:");
var_dump( $arr );
?>

結果は

配列の中身:array(3) { [0]=> string(1) “a” [1]=> string(1) “b” [2]=> string(1) “c” }
要素の中身:string(1) “a”
配列の中身:NULL
要素の中身:string(1) “b”
配列の中身:NULL
要素の中身:string(1) “c”
最終的な配列の中身:NULL

のように出力されます。

Continue reading

投稿タイトル PHPer向けJavaScript入門

shimazakiです。

先月社内勉強会で「PHPer向けJavaScript入門」をやりましたので、その資料を公開します。

PHPer向けJavaScript入門
資料はamachang氏のS6を使わて頂きました。
(ウィンドウリサイズ時のサイズ調整とマウスクリックでもページが進むように手を入れてあります、あとIEだと微妙に崩れてしまうので、Firefoxを推奨します)

自分自身真面目にJavaScriptの勉強をしたことがなかったので、良い勉強になりました。
PHPは分かる、JavaScriptはちょっとだけ分かる、もしくは何となく分かっている、という人にはオススメできるかもしれません。

間違っている箇所などありましたら指摘いただけると幸いです。

投稿タイトル PHPで何週目かを取得するコード

shimazakiです。

今日は前に社内で遊んだ課題の中から、「指定日が何週目なのかを取得するコード」のお話をしたいと思います。

何週目かを取得するコード(日曜日固定)

要件としては以下になります。

  • 日曜日を週の始まりとする
  • 一日から最初の土曜日までを「1週目」とする

真面目に考えると指定日の日付と、一日の曜日と指定日の曜日との差分とをどうこうすれば出てくると思いますが、ちょっと手を抜くことにします。

上記要件を踏まえた上でカレンダーを見てみると、土曜日の日付がその週で最大の日付になっていることが分かると思います。

なので、指定日の日付の週の土曜日の日付が分かれば計算が単純になります。

幸いPHPのdate関数を使用すれば日〜土が0〜6で取得出来ますのでちょうど良いですね。

function getWeek( $timestamp ){
return ceil( ( date(’d',$timestamp) + ( 6 - date(’w',$timestamp) ) ) / 7 );
}

指定日から土曜日までの差分を指定日に加算し、一週間の日数分の7で割り、切り上げれば何週目かが取得できます。

関数なのでワンライナーにする必要はないのですが(そもそもワンライナーって言っていいのかこれ)、つい。

Continue reading

投稿タイトル ブックマークレットで自分だけのツール

shimazakiです。こんにちは。

今回は開発を少しだけ楽にするブックマークレットを紹介します。

・ログインIDとパスワードをブックマークレットで入力する
開発しているときにアカウントごとに頻繁にログインしなおしたりすることはありませんか?
ちょうど私自身が今そんな感じなだけかも知れませんが。

そんな時は以下のブックマークレットを使用します。

Continue reading

Home > Archives > ラボメンバー「shimazaki」の投稿一覧

その他

Feed配信

RSSリーダー登録

myyahooへ追加
Googleへ追加
はてなRSSへ追加
Livedoorリーダーへ追加
goo RSSリーダーへ追加

携帯サイト

携帯サイトへのQRコード
メタ情報

Page Top