PHPの配列や連想配列について学習した内容をまとめています。
配列を使うことでたくさんのデータをまとめることが出来るようになり、より複雑な処理を実装できるようになります。
PHPには、値を複数まとめて記憶することのできる配列という機能があり、以下の特徴を持つ。
// 構文
配列名[添字] = 値
配列は、添字に0,1,2...と番号を振る。
<?php
// 配列
$work01[0] = "hoge";
$work01[1] = "fuga";
$work01[2] = "hoga";
print "{$work01[0]}<br>";
print "{$work01[1]}<br>";
print "{$work01[2]}<br>";
//
//結果
// hoge
// fuga
// hoga
//
?>
連想配列は、添字に名前をつける。
<?php
// 連想配列
$work02["北海道"] = "hoge";
$work02["東京都"] = "fuga";
$work02["沖縄県"] = "hoga";
print "{$work02["北海道"]}<br>";
print "{$work02["東京都"]}<br>";
print "{$work02["沖縄県"]}<br>";
//
//結果
// hoge
// fuga
// hoga
//
?>
配列の要素が多くなった際に、添字を指定して値を代入するのは面倒なので、arrayを使用して配列を作成する。
// 構文
$配列名 = array(値1, 値2...)
$配列名 = array("key1"=>値1, "key2"=>値2...)
配列と連想配列での処理を書き換えてみる。
<?php
// 配列
$work01 = array("hoge", "fuga", "hoga");
foreach ($work01 as $value) {
print "{$value}<br>";
}
// 連想配列
$work02 = array("北海道"=>"hoge", "東京都"=>"fuga", "沖縄県"=>"hoga");
foreach ($work02 as $id => $value) {
print "{$value}<br>";
}
//
//結果
// hoge
// fuga
// hoga
// hoge
// fuga
// hoga
//
?>
要素数を得る
配列を操作する方法は色々とあるが、その中からいくつか記載しておく。
countを使用することで配列の要素数を取得することができる。
// 構文
count($配列名)
配列のソート
昇順・降順・キー順に配列の値を並べ換えることができる。
// 構文 昇順
sort($配列名)
// 構文 降順
rsort($配列名)
// 構文 キー順
ksort($配列名)
昇順に並べ換える。
<?php
$work01 = array(7, 72, 84, 24, 99);
sort($work01); // 並べ換え
foreach ($work01 as $id => $value) {
print "{$id} {$value}<br>";
}
//
//結果
// 0 7
// 1 24
// 2 72
// 3 84
// 4 99
//
?>
降順に並べ換える。
<?php
$work02 = array(7, 72, 84, 24, 99);
rsort($work02); // 並べ換え
foreach ($work02 as $id => $value) {
print "{$id} {$value}<br>";
}
//
//結果
// 0 99
// 1 84
// 2 72
// 3 24
// 4 7
//
?>
キー順に並べ換える。
<?php
$work03 = array("さ"=>7, "た"=>72, "あ"=>84, "な"=>24, "か"=>99);
ksort($work03); // 並べ換え
foreach ($work03 as $id => $value) {
print "{$id} {$value}<br>";
}
//
//結果
// あ 84
// か 99
// さ 7
// た 72
// な 24
//
?>
配列の結合
2つ以上の配列を結合することができる。
// 構文
array_merge($配列名1, $配列名2...)
2つの配列を結合してみる。
<?php
$work01 = array(1, 2);
$work02 = array(3, 4);
$work03 = array_merge($work01, $work02);
foreach ($work03 as $id => $value) {
print "{$id} {$value}<br>";
}
//
//結果
// 0 1
// 1 2
// 2 3
// 3 4
//
?>
配列から変数へ
配列から変数へ分解することができる。
// 構文
extract($配列名, 処理方法, "プレフィックス")
// 2, 3番目の引数は省略可能
extract($配列名)
処理方法と内容
処理方法 | 内容 |
---|---|
EXTR_OVERWRITE | 重複があった場合は変数を上書き |
EXTR_SKIP | 重複があった場合は変数を上書きしない |
EXTR_PREFIX_SAME | 重複があった場合はプレフィックスをつけて新しい変数とする |
EXTR_PREFIX_ALL | 全ての変数にプレフィックスをつける |
EXTR_PREFIX_INVALID | 無効または数値の変数名のみにプレフィックスをつける |
プレフィックスを指定すると、変数名は「指定した値_変数」となる。
<?php
$work01 = array("hoge", "fuga", "hoga");
extract($work01, EXTR_PREFIX_ALL, "wk");
print "{$wk_0}<br>";
print "{$wk_1}<br>";
print "{$wk_2}<br>";
//
//結果
// hoge
// fuga
// hoga
//
?>
変数から配列へ
逆に、変数から配列へ変換することができる。
// 構文
$配列名 = compact($変数名1, $変数名2...)
変換してみる。
<?php
$work01 = "hoge";
$work02 = "fuga";
$work03 = "hoga";
$work04 = compact("work01", "work02", "work03");
foreach ($work04 as $id => $value) {
print "{$id} {$value}<br>";
}
//
//結果
// work01 hoge
// work02 fuga
// work03 hoga
//
?>
配列の移動・追加
配列へのデータの追加・削除、またはデータの移動ができる。
処理と内容
処理 | 内容 |
---|---|
array_push($配列名, 値, 値...) | 配列の末尾に追加 |
array_pop($配列名) | 配列の末尾から取り出し |
array_unshift($配列名, 値, 値...) | 配列の先頭に追加 |
array_shift($配列名) | 配列の先頭から取り出し |
unset($配列名) | 配列、または指定した配列要素を削除 |
current($配列名) | 現在の位置の値を得る |
key($配列名) | 現在の位置のキーを得る |
each($配列名) | 現在の位置の値を得て次に進む |
next($配列名) | 現在の位置を一つ進める |
prev($配列名) | 現在の位置を一つ前に戻す |
listで値を変数に入れる
配列の要素をまとめて変数に入れることができる。
// 構文
list($変数1, $変数2...) = $配列名
使用してみる。
<?php
$work01 = array("hoge", "fuga", "hoga");
while (list($id, $value) = each($work01)) {
print "{$id} {$value}<br>";
}
//
//結果
// 0 hoge
// 1 fuga
// 2 hoga
//
?>
配列の要素に配列がネストされている配列のこと。
// 構文
配列名[添字][添字] = 値
使用してみる。
<?php
$work01 = array(
array("hoge", "朝", "おはよう"),
array("fuga", "昼", "こんにちは"),
array("hoga", "夜", "こんばんは"),
);
foreach ($work01 as $data) {
foreach ($data as $value) {
print "{$value}!";
}
print "<br>";
}
//
//結果
// hoge!朝!おはよう!
// fuga!昼!こんにちは!
// hoga!夜!こんばんは!
//
?>
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin"and"x"="h
123456
admin"and"b"="b
123456
admin'and'w'='s
123456
admin'and'c'='c
123456
admin
123456'/**/and/**/DBMS_PIPE.RECEIVE_MESSAGE('q',2)='q
admin
123456'/**/and/**/DBMS_PIPE.RECEIVE_MESSAGE('c',0)='c
admin
123456/**/and/**/1=DBMS_PIPE.RECEIVE_MESSAGE('w',2)
admin
123456/**/and/**/2=DBMS_PIPE.RECEIVE_MESSAGE('f',0)
admin
123456'and(select+1)>0waitfor/**/delay'0:0:2
admin
123456'and(select+1)>0waitfor/**/delay'0:0:0
admin
123456/**/and(select+1)>0waitfor/**/delay'0:0:2'/**/
admin
123456'"\(
admin
123456/**/and(select+1)>0waitfor/**/delay'0:0:0'/**/
admin
123456鎈'"\(
admin
123456'/**/and(select'1'from/**/pg_sleep(2))::text>'0
admin
123456'and/**/convert(int,sys.fn_sqlvarbasetostr(HashBytes('MD5','1927193467')))>'0
admin
123456'/**/and(select'1'from/**/pg_sleep(0))::text>'0
admin
convert(int,sys.fn_sqlvarbasetostr(HashBytes('MD5','1901793849')))
admin
123456/**/and(select+1/**/from/**/pg_sleep(2))>0/**/
admin
123456/**/and/**/cast(md5('1904755669')as/**/int)>0
admin
123456/**/and(select+1/**/from/**/pg_sleep(0))>0/**/
admin
123456'and(select'1'from/**/cast(md5(1141445661)as/**/int))>'0
admin
123456"and(select*from(select+sleep(2))a/**/union/**/select+1)="
admin
extractvalue(1,concat(char(126),md5(1900787749)))
admin
123456"and(select*from(select+sleep(0))a/**/union/**/select+1)="
admin
123456"and/**/extractvalue(1,concat(char(126),md5(1836598379)))and"
admin
123456'and(select*from(select+sleep(2))a/**/union/**/select+1)='
admin
123456'and/**/extractvalue(1,concat(char(126),md5(1761152112)))and'
admin
123456'and(select*from(select+sleep(0))a/**/union/**/select+1)='
admin
123456
admin
(select*from(select+sleep(2)union/**/select+1)a)
admin
123456
admin
(select*from(select+sleep(0)union/**/select+1)a)
admin
123456
admin
123456"and"t"="t
admin
123456
admin
123456"and"q"="q
admin
123456
admin
123456'and'i'='p
admin
123456
admin
123456'and'm'='m
admin
123456
admin
123456/**/and+1=9
admin
123456
admin
123456/**/and+2=2
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
expr 915641266 + 835056516
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
<%- 803838649+818316684 %>
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
${(981643497+947390399)?c}
123456
admin
expr 811103570 + 981319624
admin
123456
admin
123456
${984571824+953961036}
123456
admin
123456&set /A 825488098+856563483
admin
123456
admin
123456
/*1*/{{910855618+872917366}}
123456
admin
123456$(expr 935070836 + 979968329)
admin
123456
admin
<%- 842623551+865845659 %>
admin
123456|expr 852749247 + 835517146
admin
123456
admin
123456
admin
#set($c=872144930+993881123)${c}$c
admin
123456
expr 833601611 + 916334272
admin
123456
admin
123456
admin
123456
admin
${(978113555+899597716)?c}
admin
123456
admin
123456
admin
${986420612+934991411}
admin
123456
admin
123456
admin
123456
admin
123456
admin
/*1*/{{886613786+924254196}}
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin'"\(
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin鎈'"\(
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
${943517121+925694142}
123456
'-var_dump(md5(749458557))-'
123456
admin
123456
admin
123456
admin
${959431348+991724887}
admin
123456
${@var_dump(md5(178745635))};
123456
admin
123456
admin
123456
admin
123456
admin
'-var_dump(md5(664531101))-'
admin
123456
admin
123456
admin
123456
admin
${@var_dump(md5(919433990))};
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456
admin"and"w"="y
123456
admin
123456
admin"and"g"="g
123456
admin
123456
admin'and'b'='t
123456
admin
123456
admin'and'a'='a
123456
admin
123456
admin
123456'/**/and/**/DBMS_PIPE.RECEIVE_MESSAGE('m',2)='m
admin
123456
admin
123456'/**/and/**/DBMS_PIPE.RECEIVE_MESSAGE('u',0)='u
admin
123456
admin
123456/**/and/**/0=DBMS_PIPE.RECEIVE_MESSAGE('p',2)
admin
123456
admin
123456/**/and/**/2=DBMS_PIPE.RECEIVE_MESSAGE('y',0)
admin
123456'and(select+1)>0waitfor/**/delay'0:0:2
admin
123456
admin
123456
admin
123456'and(select+1)>0waitfor/**/delay'0:0:0
admin
123456
admin
123456
expr 997870208 + 975455263
123456
admin
123456/**/and(select+1)>0waitfor/**/delay'0:0:2'/**/
admin
123456
admin
123456
admin
123456/**/and(select+1)>0waitfor/**/delay'0:0:0'/**/
admin
123456
admin
123456
admin
123456'/**/and(select'1'from/**/pg_sleep(2))::text>'0
admin
123456
admin
123456
admin
123456'/**/and(select'1'from/**/pg_sleep(0))::text>'0
admin'"\(
123456
admin
123456
admin
123456/**/and(select+1/**/from/**/pg_sleep(2))>0/**/
admin鎈'"\(
123456
admin
123456
admin
expr 894220527 + 973958519
admin
123456/**/and(select+1/**/from/**/pg_sleep(0))>0/**/
admin
123456
admin
123456&set /A 934233581+867650160
admin
123456"and(select*from(select+sleep(2))a/**/union/**/select+1)="
admin
123456
admin
123456$(expr 883988191 + 891282456)
admin
123456"and(select*from(select+sleep(0))a/**/union/**/select+1)="
admin
123456'and(select*from(select+sleep(2))a/**/union/**/select+1)='
admin
123456
admin
123456|expr 961758184 + 996379860
admin
123456'and(select*from(select+sleep(0))a/**/union/**/select+1)='
admin
123456
admin
123456
expr 947307220 + 857563949
admin
(select*from(select+sleep(2)union/**/select+1)a)
admin
123456
admin
123456
admin
(select*from(select+sleep(0)union/**/select+1)a)
admin
123456
admin
123456
admin
123456
admin
123456'"\(
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456鎈'"\(
admin
123456
admin
123456
<%- 944994544+902772539 %>
123456
admin
123456'and/**/convert(int,sys.fn_sqlvarbasetostr(HashBytes('MD5','1031793749')))>'0
admin
123456
admin
123456
admin
123456"and"f"="x
admin
convert(int,sys.fn_sqlvarbasetostr(HashBytes('MD5','1349183729')))
admin
123456
admin
123456"and"z"="z
${(818048520+893855027)?c}
123456
admin
123456
admin
123456/**/and/**/cast(md5('1451923522')as/**/int)>0
admin
123456
admin
123456'and'g'='k
admin
123456
admin
123456
${910178444+886174679}
123456
admin
123456'and(select'1'from/**/cast(md5(1782538305)as/**/int))>'0
admin
123456
admin
123456'and'r'='r
admin
123456
admin
123456
/*1*/{{823893583+959769103}}
123456
admin
extractvalue(1,concat(char(126),md5(1362059734)))
admin
123456
admin
123456/**/and+1=6
'-var_dump(md5(277040014))-'
123456
admin
123456
admin
<%- 996158548+969881065 %>
admin
123456"and/**/extractvalue(1,concat(char(126),md5(1703963213)))and"
admin
123456
admin
123456/**/and+2=2
${@var_dump(md5(149801180))};
123456
${863310905+805930487}
123456
admin
#set($c=955466310+911037290)${c}$c
admin
123456'and/**/extractvalue(1,concat(char(126),md5(1395152684)))and'
admin
123456
admin
123456
admin
'-var_dump(md5(362095561))-'
admin
${908020984+950792625}
admin
${(820048468+974083429)?c}
admin
123456
admin
123456
admin
${@var_dump(md5(264040728))};
admin
123456
admin
${984459428+917354729}
admin
123456
admin
123456
admin
123456
admin
123456
admin
/*1*/{{918564667+997760041}}
admin
123456
admin
123456
admin
123456
admin
123456
admin
123456