Home > 技術情報
技術情報
PHPの配列結合の違いについてのまとめ
- 2008年10 月6日(月)
- 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の不思議
- 2008年9 月22日(月)
- PHP
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
のように出力されます。
PHPer向けJavaScript入門
- 2008年9 月12日(金)
- JavaScripts/Ajax | PHP
shimazakiです。
先月社内勉強会で「PHPer向けJavaScript入門」をやりましたので、その資料を公開します。
PHPer向けJavaScript入門
資料はamachang氏のS6を使わて頂きました。
(ウィンドウリサイズ時のサイズ調整とマウスクリックでもページが進むように手を入れてあります、あとIEだと微妙に崩れてしまうので、Firefoxを推奨します)
自分自身真面目にJavaScriptの勉強をしたことがなかったので、良い勉強になりました。
PHPは分かる、JavaScriptはちょっとだけ分かる、もしくは何となく分かっている、という人にはオススメできるかもしれません。
間違っている箇所などありましたら指摘いただけると幸いです。
PHPで何週目かを取得するコード
- 2008年8 月20日(水)
- PHP
shimazakiです。
今日は前に社内で遊んだ課題の中から、「指定日が何週目なのかを取得するコード」のお話をしたいと思います。
何週目かを取得するコード(日曜日固定)
要件としては以下になります。
- 日曜日を週の始まりとする
- 一日から最初の土曜日までを「1週目」とする
真面目に考えると指定日の日付と、一日の曜日と指定日の曜日との差分とをどうこうすれば出てくると思いますが、ちょっと手を抜くことにします。
上記要件を踏まえた上でカレンダーを見てみると、土曜日の日付がその週で最大の日付になっていることが分かると思います。
なので、指定日の日付の週の土曜日の日付が分かれば計算が単純になります。
幸いPHPのdate関数を使用すれば日〜土が0〜6で取得出来ますのでちょうど良いですね。
function getWeek( $timestamp ){
return ceil( ( date(’d',$timestamp) + ( 6 - date(’w',$timestamp) ) ) / 7 );
}
指定日から土曜日までの差分を指定日に加算し、一週間の日数分の7で割り、切り上げれば何週目かが取得できます。
関数なのでワンライナーにする必要はないのですが(そもそもワンライナーって言っていいのかこれ)、つい。
MondoRescueによるバックアップとリカバリ(CentOS5.1)
- 2008年2 月14日(木)
- オープンソース
こんにちは。
最後の九州男児の血を受け継いだマメ太です。
今回、とある案件にてサーバーのバックアップとリカバリを検討する機会がありました。
その際に見つけた「MondoRescue」というツールについての内容を備忘録がてら残しておきます。
前提条件・要望
- バックアップ対象のサーバーはCentOS 5.1
- バックアップする領域を個別に検討したりバックアップしたりするのではなく、システム全体を一気にバックアップしたい!
- バックアップ用の記憶媒体としてCD-RW、DVD-RWなどの光学ドライブが利用可能。
というよりは、CD(or DVD)を利用してシステムのリカバリを行いたいので光学メディアにバックアップしたい! - ディスク領域のフォーマットとしてLVMも利用する。
MondoRescueについて
MondoRescue(以下、mondo)とはLinuxなどのシステムのバックアップ&リストア作業を効率的にサポートしてくれる優れものツールです。
似たようなツールとしては「Norton Gohst」「Acronis TrueImage」「PartitionImage」などがあります。
大まかに言うとmondoには
- オープンソース(GPLライセンス)である。
- バックアップ先としてCD、DVD、テープ、HDD、NFSサーバー、USBなどが選択可能。
- isoイメージのみの生成も可能。
- 生成したCD・DVDはブータブルなリカバリ用メディアとして生成。
- システム全体の復旧のみならず、リカバリ時にパーティションの切り直しやフォーマットが行え個別なリストアが可能であるため、部分的な復旧も可能。
などの特徴があります。
Home > 技術情報

