PHPにおける配列操作のまとめ
PHPでの配列の基本
配列とは?
配列とは、PHPにおいて通常、変数は値を1つしか持てません
変数に値を追加しようとした場合、その変数の値は上書きされてしまいます
しかし配列の場合、変数の中にいくつもの値を持つ事ができます
$hairetu = array();
これで $hairetuは 配列であると宣言しました
いちいち宣言しなくても、直接値を入れる事ができます
$hairetu = array('りんご','みかん','オレンジ');
上の例では $hairetu[0]にりんご、$hairetu[1]にみかん、$hairetu[2]にオレンジがはいります
値の追加
では、上の$hairetuに値を1つ追加したいと思います
$hairetu = array('りんご','みかん','オレンジ');
$hairetu[3] = 'メロン';
$hairetu[3] = 'メロン';
配列の要素の数をカウントする (count()関数)
count()関数 (配列内に値がいくつあるのかカウントする)
count()関数で配列内の値の数を数える例
$hairetu = array('赤','青','黄','緑','桃');
$count = count($hairetu);
echo $count;
結果 5
配列の値を取り出す (array_slice()関数)
array_slice()関数 - 配列内の値を1部取り出す
array_sliceで配列の1部を取り出す例
//配列の2番目($hairetu[1])から 3つ取り出します
$hairetu = array('悟空','ベジータ','トランクス','クリリン');
$result = array_slice($hairetu,1,3);
var_dump($result);
結果
array(3) {
[0]=>
string(12) "ベジータ"
[1]=>
string(15) "トランクス"
[2]=>
string(12) "クリリン"
}
配列の後ろ2番目から最後までを取り出す例
$hairetu2 = array('たぬき','きつね','オオカミ','ペンギン');
$result2 = array_slice($hairetu2,-2);
結果
array(2) {
[0]=>
string(12) "オオカミ"
[1]=>
string(12) "ペンギン"
}
配列操作 いろいろな値の追加方法(PHP)
array_push()関数 (配列の最後に1つ以上の値を追加する)
array_push()関数で配列の最後尾に値を2つ追加する例
$hairetu = array('りんご','みかん');
array_push($hairetu, 'メロン', 'バナナ');//配列の最後に「メロン」、「バナナ」を追加
結果 ('りんご','みかん','メロン','バナナ')
array_unshift()関数 (配列の先頭に値を1つ以上追加する)
array_unshift()関数で配列の先頭に値を2つ追加する例
$hairetu = array('りんご','みかん','メロン');
array_unshift($hairetu,'パイナップル','マンゴー');
結果 ('パイナップル','マンゴー','りんご','みかん','メロン')
array_splice()関数 (指定位置(配列の途中)に値を追加する)
使い方 array_splice(操作する配列,挿入する位置,削除する数,'代入する値')
array_splice()関数で配列の途中に値を追加する例
$hairetu = array('東京','大阪','福岡');
//第2引数は挿入する位置、第3引数は削除する数 (0は削除しない=1つづつずれる)
array_splice($hairetu,2,0,'北海道');//2は$hairetu[2]に・・ 0は削除しないという事
結果 ('東京','大阪','北海道','福岡')
array_splice()関数は、置換や削除もできます
arry_splice()関数で値を置換する
array_splice()関数で値を1つ置換する例
arry_splice()関数で値を削除する
$hairetu = array('東京','大阪','福岡');
//第2引数は挿入する位置、第3引数は削除する数 (1を指定すると1つ削除) つまりは置換
array_splice($hairetu,1,1,'青森');//1は$hairetu[1]に・・ 1は1つ削除する
結果 ('東京','青森','福岡')
array_splice()関数で配列途中の値を2つ削除する例
$hairetu = array('犬','ねこ','ぱんだ','サル');
//第2引数は挿入する位置、第3引数は削除する数 (2を指定すると2つ削除)
//第4引数を指定しないので何も追加しない つまりは削除だけ
array_splice($hairetu,1,2);//1は$hairetu[1]以降の値を2つ削除
結果 ('犬','サル')
配列の中に値があるか調べる (in_array)
in_array()関数 (配列の中に値が存在するか確認する関数)使い方 in_array(検索値,調べたい配列名,TRUE); (TRUEをつけると型まであっているか調べる)
in_array()関数を使い、配列の中に値が存在するか?確認する例
$hairetu = array('アメリカ','カナダ','イギリス','日本');
if(in_array('日本',$hairetu,TRUE)){
echo '配列の中に日本は含まれます';
}else{
echo '配列の中に日本は含まれていません';
}
結果 配列の中に日本は含まれています
変数が配列なのかを調べる (is_array)
is_array()関数 (配列であるかどうか?を調べる)
is_array()関数の使用例
$tadano_mojiretu = 'おはようございます、今日も良いお天気ですね?';
if(is_array($tadano_mojiretu)){
echo '配列変数です';
}else{
echo '配列ではありません';
}
結果
配列ではありません
配列の値が何番目に出現するかを調べる
array_search関数() (配列の中で検索したい値が何番目に出現するのか調べる関数)使い方 array_search(検索値,調べたい配列名);
array_search()関数を使い、値が何番目に出現するのかを調べる例
//array_search()は 0から始まります
$hairetu = array('海','山','川');
echo array_search('川',$hairetu);
結果 2
配列の値の削除
上で紹介した、array_splice()関数で削除できますが、他にもあるのでメモしときます
unset()関数 (配列の値を削除する)
unset()関数で簡単に値を削除する例
array_search()とarray_splice()を組み合わせて、特定の値を削除
//出来すぎくんを削除したくて、出来すぎくんが何番目に出現するのかわかっている場合
$hairetu = array('出来すぎくん','のび太君','しずかちゃん');
unset($hairetu[0]);
var_dump($hairetu);
結果
array(2) {
[1]=> string(12) "のび太君"
[2]=> string(18) "しずかちゃん"
}
array_search()とarray_splice()を組み合わせて、特定の値を削除する例
array_unique()関数 (配列内で重複している値を削除する)
//カメラを削除したいけど、カメラが何番目に出現するかわからない場合
$hairetu = array('パソコン','カメラ','携帯電話','テレビ','エアコン');
$cnt = array_search('カメラ',$hairetu);//$hairetu[0]がパソコンなので、$cntには 1 が入る
array_splice($hairetu,$cnt,1);//$hairetuの中から$cnt番目の値を1つ削除
var_dump($hairetu);
結果
array(4) {
[0]=> string(12) "パソコン"
[1]=> string(12) "携帯電話"
[2]=> string(9) "テレビ"
[3]=> string(12) "エアコン"
}
みごとに 「カメラ」 だけを 削除をすることに成功しました
array_unique()関数で重複している値を削除する例
array_diff()をつかって、配列の中の空要素だけを取り除く
$hairetu = array('お父さん','お母さん','おじいちゃん','お父さん');
array_unique($hairetu);//重複した値を削除
結果 ('お父さん','お母さん','おじいちゃん')
array_diff()を使い、配列の中の空要素だけを削除する例
//$hairetuには 何も値がない空要素がいくつか混じっています
$hairetu = array("スカート","","ズボン","シャツ","","ネクタイ");
//まずは、この配列がどうなっているのか?var_dumpしてみます
var_dump($hairetu);
array(6) { [0]=> string(12) "スカート"
[1]=> string(0) ""
[2]=> string(9) "ズボン"
[3]=> string(9) "シャツ"
[4]=> string(0) ""
[5]=> string(12) "ネクタイ"
}//やっぱり、空要素もちゃっかりカウントされています
//ここから空要素だけを省くプログラム
$new_hairetu =array_diff($hairetu, array( "" ) );
var_dump($new_hairetu);
結果
array(4) {
[0]=> string(12) "スカート"
[2]=> string(9) "ズボン"
[3]=> string(9) "シャツ"
[5]=> string(12) "ネクタイ"
}
array_diff()についての追加説明
array_diffは 今回は削除というプログラムに使用しましたが
本来は 配列と配列を比較して、どちらにも存在しない値を返す関数です
上で使用した例では、$hairetu と array( "" ) を 比較し
$new_hairetuに、空要素が混じっていない部分だけが返って来た訳です
array_diff()の詳しい使い方は 下記でもう一度説明します
2つの配列の値を比較する(array_diff)
array_diff()関数で2つの配列を比較して重複していない値を探す
array_diff()関数の使い方
$hairetu1 = array('海','山','川','空');
$hairetu2 = array('海','空');
$result = array_diff($hairetu1, $hairetu2);
var_dump($result);
結果
array(2) {
[1]=> string(3) "山"
[2]=> string(3) "川"
}
配列をつなげて1つの文字列に変換する (implode)
implode()関数 (配列の値を指定した文字でつなげる)
implode()関数で配列を指定した文字で結合し文字列を作成する例
$hairetu = array('アイスクリーム','プリン','シュークリーム');
$tabetai = implode('と',$hairetu);
echo $tabetai.'が食べたい';
結果 アイスクリームとプリンとシュークリームが食べたい
文字列を分解して配列に格納したい(explode)
explode()関数 (特定の文字で区切り配列に格納する)
explode()関数で文字列を分解し配列に格納する例
$youbi = '月曜日,火曜日,水曜日,木曜日,金曜日,土曜日,日曜日';
$bunkai_youbi = explode(',',$youbi);
var_dump($bunkai_youbi);
結果
array(7) {
[0]=> string(9) "月曜日"
[1]=> string(9) "火曜日"
[2]=> string(9) "水曜日"
[3]=> string(9) "木曜日"
[4]=> string(9) "金曜日"
[5]=> string(9) "土曜日"
[6]=> string(9) "日曜日"
}
文字列を1文字づつ分解して配列に入れたい (str_split)
str_split()関数 (1文字づつ分解して配列に格納する)
str_split()関数で文字列を分解し配列に格納する例
などとすると2文字づつ分解できますがマルチバイトは2としても分解できません!!
では、マルチバイトを1文字づつ分解する場合はどうすればよいか?
//str_split()はシングルバイトしか分割できません
$str = 'abc';
$str2 = str_split($str);
var_dump($str2);
結果
array(3) {
[0]=> string(1) "a"
[1]=> string(1) "b"
[2]=> string(1) "c"
}
str_split($str,2);などとすると2文字づつ分解できますがマルチバイトは2としても分解できません!!
では、マルチバイトを1文字づつ分解する場合はどうすればよいか?
//まず文字列が何文字なのか?カウントします
$str = 'こんにちは';
$cnt = mb_strlen($str,'UTF-8');//必ず文字コード指定して下さい
for($i=0;$i<$cnt;$i++){
$bunkai[] = mb_substr($str,$i,1,'UTF-8');//1文字づつ分解して配列に格納
}
var_dump($bunkai);
array(5) {
[0]=>
string(3) "こ"
[1]=>
string(3) "ん"
[2]=>
string(3) "に"
[3]=>
string(3) "ち"
[4]=>
string(3) "は"
}
配列の値を合計する(array_sum)
array_sum()関数 (配列の値を合計する)
array_sum()関数で配列の値を合計する例
$int = array(1,10,100,1000);
echo array_sum($int);
結果 1111
配列の値すべてに処理を施す(array_map)
array_map()関数 (配列の値すべてに対して処理を行う)
array_map()関数で配列の値すべてに処理をする例
//すべての名前に 様をつけます
function sama($str){//様をつける ユーザー関数を定義
return $str.'様';
}
$name = array('田中','山本','佐藤','高橋');
$keisyou = array_map("sama",$name);
var_dump($keisyou);
結果
array(4) {
[0]=> string(9) "田中様"
[1]=> string(9) "山本様"
[2]=> string(9) "佐藤様"
[3]=> string(9) "高橋様"
}
成功wwwwwwwarray_map()を使用して配列の値すべてにhtmlspecialcharsを施す(エスケープする)
配列の値すべてに一気に htmlspecialcharsを施したい(エスケープ)
配列の値全部にまとめてhtmlspecialcharsをかけるユーザー関数
//通常、配列にはhtmlspecialcharsはまとめてかけれないので関数を作成
function all_h($string) {
if (is_array($string) === true) {
return array_map("all_h", $string);
} else {
return htmlspecialchars($string, ENT_QUOTES,'UTF-8');
}
}
//ここまで
$tag = array('<b>こんにちは</b>','<del>さようなら</del>');
$escape = all_h($tag);
var_dump($escape);
結果
array(2) {
[0]=>
string(34) "<b>こんにちは</b>"
[1]=>
string(38) "<del>さようなら</del>"
}
わかりにくいですが成功してますwww
配列の数だけ繰り返して処理したい (foreach)
foreach関数 (配列の数だけ繰り返す[ループ処理])
foreach関数で繰り返しループ処理する例
$cup = array('A','B','C','D');
//配列の中に値が4つあるので4回ループ
foreach($cup as $key => $val){//$keyは添え字 [0]~[3]のこと $valは 配列の値('A','B','C','D')
$bust[] = $val.'カップ';
}
var_dump($bust);
結果
array(4) {
[0]=> string(10) "Aカップ"
[1]=> string(10) "Bカップ"
[2]=> string(10) "Cカップ"
[3]=> string(10) "Dカップ"
}
foreach関数で繰り返しループ処理する例2
$teikyuubi = array(5,6,7);
foreach($teikyuubi as $key =>$val){
switch($teikyuubi[$key]){
case 0 : $oyasumi[]='月曜';
break;
case 1 : $oyasumi[]='火曜';
break;
case 2 : $oyasumi[]='水曜';
break;
case 3 : $oyasumi[]='木曜';
break;
case 4 : $oyasumi[]='金曜';
break;
case 5 : $oyasumi[]='土曜';
break;
case 6 : $oyasumi[]='日曜';
break;
case 7 : $oyasumi[]='祝日';
break;
}
}
$message = implode('、',$oyasumi).'は定休日となっております';
}
echo $message;
結果 土曜、日曜、祝日は定休日となっております
配列の値をPOST(GET)したい
フォームから配列をPOST(GET)したい
formからPOSTする例1
基本事項 : フォームからPOSTするときは,name部分を配列にします
基本事項 : フォームからPOSTするときは,name部分を配列にします
//フォーム部分
<form action="" method="POST">
<input type="checkbox" name="check[]" value="0">男性
<input type="checkbox" name="check[]" value="1">女性
<input type="checkbox" name="check[]" value="2">その他
<input type="submit" name="submit" value="登録">
</form>
//受け取り部分
if($_POST['submit']){
$seibetu = $_POST['check'];
}
フォーム部分のname部分を配列にしとけば、受け取り時は自動的にに配列になります!
注意することは、配列はまとめてエスケープできないので上記のまとめてエスケープする関数を使います
(ここではエスケープしてません)
foreachで作成した配列の値をPOST(GET)したい
フォームからforeachで作成した<input type="hidden">をPOSTする
ショッピングカートなどで使うテクニックです
//フォーム部分
<form action="http://ssl.com/ssl.php" method="POST">
<?php
foreach ($_SESSION["cart"] as $key => $val){ ?>
<input type="hidden" name="cart[<?php echo $key; ?>]" value="<?php echo $val; ?>" />
<?php
}
?>
<input type="submit" name="kounyuu" value="購入する">
</form>