Home > 技術情報 > PHP

PHP

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

shimazakiです。

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

array_merge

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

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

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


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

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


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

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


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

PHP:
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:
<?php
$arr1 = array('k1'=>'v1', 'k2'=>'v2');
$arr2 = array('k1'=>'vv1');
$arr = array_merge_recursive($arr1, $arr2);
var_dump($arr);
?>

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

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

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

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

array_mergeと同じ結果。

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


加算演算子

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

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

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

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

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

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

以上です。

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

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

shimazakiです。

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

PHP:
<?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で取得出来ますのでちょうど良いですね。

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

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

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

Continue reading

投稿タイトル PHPでバッチ処理を書いてみる

毎度!
話せるシステム屋を目指しています。
tatsumiです。こんにちは。

とある人の話なんですけれどね、
その人は3人いる兄弟の中で唯一離婚経験があるもんだから
正月が嫌で嫌で仕方ないんだそうです。
それと言うのも、正月は親族一同が集まってご飯を食べるのが恒例となっていて
弟達のお嫁さんに囲まれるのが居心地が悪く肩身が狭いそうなんですよ。
まあ、なんて言うか…

これが本当の「バツが悪い」ですね!

(会場がどっかんどっかん爆笑に…)

(なる訳ない!)

すみません…。
こんな小話は置いておいて本題に入りたいと思います。

PHPでバッチ処理を書いてみる

業務系の仕事をやっていると
絶対に避けて通れないのがバッチ処理ですよね。
現在でもバッチ処理はC言語やCOBOLで書かれることが多いようですが、
数億・数十億円といったような大規模なシステムでない限り
PHPを使用していても十分に要件を満たせると思います。
(もちろん、状況によって異なりますが)
ということで、今回はPHP(cli)でバッチ処理に挑戦してみます。

Continue reading

Home > PHP

ページ
メタ情報

Page Top