配列配列関数1
- array〔配列、連想配列を生成する〕
- compact〔変数名とその値から配列を作成〕
- count, sizeof〔配列の要素数を求める〕
- current, pos〔配列内のカレントの要素を返す〕
- each〔ポインタを次の要素へ移動する〕
- end〔配列の内部ポインタを最終要素にセット〕
- extract〔配列からシンボルテーブルに変数をインポート〕
- in_array〔配列に特定の値があるか調べる〕
- key〔連想配列からキーを取り出す〕
- list〔1つ以上の変数に配列の値を割り当てる〕
- next〔内部の配列ポインタを進める〕
- prev〔内部の配列ポインタを1つ前に戻す〕
- range〔ある範囲の整数を有する配列を作成する〕
- reset〔配列の内部ポインタを先頭に戻す〕
array
配列、連想配列を生成する
unknown
array array ( キー => 値[, キー => 値] )
通常の配列は指定した順に、キーに0からの連番が自動的に振られます。 連想配列にする場合は、指定したキーと値がペアになるように記述します。
<?
/* 通常の配列 */
$fruit=Array("apple", "banana", "grape");
$a=0;
while($a < count($fruit)){
echo $fruit[$a]." ";
$a++;
}//apple banana grape
foreach($fruit as $key => $val){
echo $key."=>".$val." ";
}
// 0=>apple 1=>banana 2=>grape
?>
<?
/* 連想配列 */
$fruit=Array("a"=>"apple","b"=>"banana","g"=>"grape");
foreach($fruit as $key=>$val){
echo $key."=>".$val." ";
}
// a=>apple b=>banana g=>grape
?>
compact
変数名とその値から配列を作成
unknown
変数名を値とする文字列から、その変数の名前を配列のキー、値を配列の値とした配列を返します。 指定した変数名が見つからない場合はスキップされます。 変数は、いくつでも指定できます。
<?
$name = "hogeko";
$age = "20";
$sex = "female";
$person_vars = array("age","sex");
$result = compact("name", "nothing_here", $person_vars);
print_r($result);
//Array ( [name] => hogeko [age] => 20 [sex] => female )
?>
count, sizeof
配列の要素数を求める
unknown
int sizeof ( array $配列[, int $mode] )
配列の要素数を返します。 多次元配列の全要素(配列数+要素数)をカウントしたい場合に便利です。
オプションの第2引数mode(PHP4.2.0~)のデフォルトは0です。 COUNT_RECURSIVEまたは1を指定した場合は、再帰的に配列をカウントします。
sizeof()関数は、count()関数のエイリアスです。
<?
$fruit = array("apple","banana","grape");
echo count($fruit); //3
echo sizeof($fruit); //3
for($i = 0; $i < count($fruit); $i++){
echo $fruit[$i] . "\t";
}
//apple banana grape
//多次元配列をカウント(配列数2 + 要素数6 = 8)
$food = array(
"fruit"=>array("apple","banana","grape"),
"vegetable"=>array("carrot","potato","tomato")
);
echo count($food,COUNT_RECURSIVE); //8
?>
current, pos
配列内のカレントの要素を返す
unknown
配列の内部ポインタが現在指している配列要素の値を返します。 内部ポインタが最終要素以上を指していた場合は、FALSEを返します。
pos()関数は、current()関数のエイリアスです。
この関数を使用しても内部ポインタは移動しないので、reset()関数を使用して配列の内部ポインタを先頭に戻す必要はありません。
<?
$fruit = array('apple', 'banana', 'coconut', 'grape');
$mode = current($fruit); // $mode = 'apple';
$mode = next($fruit); // $mode = 'banana';
$mode = current($fruit); // $mode = 'banana';
$mode = prev($fruit); // $mode = 'apple';
$mode = end($fruit); // $mode = 'grape';
$mode = current($fruit); // $mode = 'grape';
?>
each
ポインタを次の要素へ移動する
unknown
この関数は単独よりも、list()関数と一緒に使用することが多いです。
配列から、次の要素のキーと値のペアを返し、内部ポインタを進めます。 このペア配列で1、value、0、keyという4つのキーを有しています。 ポインタが最後の要素以降を指す場合は、FALSEを返します。
このeach()関数の使用後は、reset()関数で内部ポインタを先頭に戻しましょう。
カーソル移動関数 | 説明 |
---|---|
next ( array 配列 ) | 配列のポインタを次の要素へ移動し、移動した先の要素を返す。それ以上移動できない場合は、FALSEを返す。 |
prev ( array 配列 ) | 配列のポインタを前の要素へ移動し、移動した先の要素を返す。それ以上移動できない場合は、FALSEを返す。 |
end ( array 配列 ) | 配列のポインタを最後の要素へ移動し、移動した先の要素を返す。 |
reset ( array 配列 ) | 配列のポインタを先頭の要素へ移動し、移動した先の要素を返す。 |
<?
$animal = array("dog", "hode" => "cat", "cow");
echo next($animal)."<br>"; //cat
echo prev($animal)."<br>"; //dog
echo end($animal)."<br>"; //cow
echo reset($animal); //dog
reset($animal); //ポインタを先頭に戻す
while($arr = each($animal)){
print_r($arr);
}
//Array ( [1] => dog [value] => dog [0] => 0 [key] => 0 )
//Array ( [1] => cat [value] => cat [0] => hode [key] => hode )
//Array ( [1] => cow [value] => cow [0] => 1 [key] => 1 )
if(each($animal) === false) echo "END...<br>"; //END...
reset($animal); //ポインタを先頭に戻す
if($arr = each($animal)) print_r($arr);
//Array ( [1] => dog [value] => dog [0] => 0 [key] => 0 )
?>
<?
#連想配列では、 インデックスに文字列を割り当てているため、
#ループを利用する場合、 普通の配列のように添字を使って
#その値を参照できないため、list () 関数と each () 関数を一緒に使用する。
$fruit = array("apple" => "りんご","banana" => "みかん","grape" => "ぶどう");
while(list($key,$val) = each($fruit)){
echo "キーは".$key."、値は".$val."です。<br>";
}
//キーはapple、値はりんごです。
//キーはbanana、値はみかんです。
//キーはgrape、値はぶどうです。
?>
end
配列の内部ポインタを最終要素にセット
unknown
配列の内部ポインタを最終要素まで進め、その値を返します。
<?
$fruit = array('apple', 'banana', 'coconut', 'grape');
echo end($fruit); //grape
?>
extract
配列からシンボルテーブルに変数をインポート
unknown
配列から現在のシンボルテーブルに変数をインポートするために使用します。 この関数は、連想配列のキーを変数名、値を変数の値として処理します。 各キーと値のペアに、extract_typeおよび接頭辞の引数に基づき、現在のシンボルテーブルに変数を1つ作成します。
オプションの第2引数extract_typeが省略された場合は、EXTR_OVERWRITEが使用される。
オプションの第3引数接頭辞は、extract_typeがEXTR_PREFIX_SAME、EXTR_PREFIX_ALL、EXTR_PREFIX_INVALIDあるいはEXTR_PREFIX_IF_EXISTSにしている場合は、必ず指定する必要があります。
接頭辞をつけた変数が無効な変数の場合は、シンボルテーブルにインポートされません。 接頭辞は、アンダースコアで配列のキーから自動的に分割されます。
$_POSTや$_GETのようなユーザーが入力したデータをextractするのはセキュリティ上危険です。
extract_type | 説明 |
---|---|
EXTR_OVERWRITE | デフォルト。衝突があった場合、存在する変数が上書きされる。 |
EXTR_SKIP | 衝突があった場合、存在する変数は上書きされない。 |
EXTR_PREFIX_SAME | 衝突があった場合、接頭辞を前に付けた新しい変数となる。 |
EXTR_PREFIX_ALL | 全ての変数の前に接頭辞を付ける。 |
EXTR_PREFIX_INVALID | 無効または数値の変数のみに接頭辞を付ける(PHP4.0.5~) |
EXTR_IF_EXISTS | カレントのシンボルテーブルに既存する場合のみ上書きする(PHP4.2.0~) |
EXTR_PREFIX_IF_EXISTS | 同じ変数だが接頭辞をつけていないバージョンの変数がカレントのシンボルテーブルに存在する場合のみ変数を生成(PHP4.2.0~) |
EXTR_REFS | 変数を参照して展開する(php4.3.0~) |
<?
//$var_array はwddx_deserializeから返された配列と仮定
$size = "large";
$var_array = array("color" => "blue",
"size" => "medium",
"shape" => "sphere");
extract($var_array, EXTR_PREFIX_SAME, "wddx");
echo "$color, $size, $shape, $wddx_size\n";
//blue, large, sphere, medium
?>
in_array
配列に特定の値があるか調べる
unknown
検索対象の配列に検索する値があった場合にTRUE、なかった場合にFALSEを返します。
オプションの第3引数厳格にTRUEを指定すると、型も一致するか確認します。 デフォルトはFALSE(型の一致は確認しない)です。
検索する値が文字列の場合、比較の際に大文字小文字が区別されます。 PHP4.2.0以降は、検索する値に配列を指定できます。
<?
$arr = array("dog", "cat", "cow", 6, "10");
#配列内に、指定した要素があれば「TRUE」、なければ「FALSE」を返す。
#要素が文字列の場合は大文字と小文字を区別する。
if(in_array("6", $arr)) echo '"6" is exists';
else echo '"6" is not exists';
//"6" is exists
#引数「厳格」に「TRUE」を指定すると、要素の型まで厳格に比較する。
#デフォルト値は「FALSE」。
if(in_array("6", $arr, TRUE)) echo '"6" is exists';
else echo '"6" is not exists';
//"6" is not exists */
$input[a] = "aaa";
$input[b] = "bbb";
$input[c] = "ccc";
$input[d] = "ddd";
$input[e] = "eee";
if(in_array("ccc",$input)) echo "見つかりました";
else echo "見つかりません";
//見つかりました
#「検索する値」が配列の場合
$input[a] = array("a","aa","aaa");
$input[b] = "bbb";
$input[c] = "ccc";
$input[d] = "ddd";
$input[e] = "eee";
if(in_array(array("a","aa","aaa"),$input)) echo "見つかりました";
else echo "見つかりません";
//見つかりました
#より深く調べる場合
$input[a] = array("a","aa","aaa");
$input[b] = "bbb";
$input[c] = "ccc";
$input[d] = "ddd";
$input[e] = "eee";
if(in_array("a",$input[a])) echo "見つかりました";
else echo "見つかりません";
//見つかりました
?>
key
連想配列からキーを取り出す
unknown
現在の配列位置における連想配列要素のキーを返します。
<?
$fruit = array("a"=>"apple","b"=>"banana","c"=>"coconut");
while($fruit_name = current($fruit)){
if($fruit_name == "banana"){
echo "キー「".key($fruit)."」の値は「".$fruit[key($fruit)]."」です";
break;
}
next($fruit);
}
//キー「b」の値は「banana」です
?>
list
1つ以上の変数に配列の値を割り当てる
unknown
array()関数で定義された値と同じ数の変数にそれぞれの値を渡します。 配列の要素数が多い場合は、残りの要素は代入されません。 この関数は、数値添字の配列のみを生成します。添字は0からの連番が振られます。
<?
$fruit = array("apple", "banana", "grape");
list($a,$b,$c) = $fruit;
echo "$a $b $c<br>"; //apple banana grape
list(,$b) = $fruit;
echo $b."<br>"; //banana
list($a, $b) = explode("-", "apple-リンゴ");
echo "$a $b<br>"; //apple リンゴ
?>
next
内部の配列ポインタを進める
unknown
配列の内部ポインタが次の要素を指すようにし、次の要素の値を返します。 それ以上要素がない場合は、FALSEを返します。
<?
$fruit = array("apple", "banana", "grape");
echo next($fruit); //banana
echo next($fruit); //grape
echo (next($fruit)) ? "true" : "false"; //false
?>
prev
内部の配列ポインタを1つ前に戻す
unknown
配列の内部ポインタが指している前の要素の値を返します。 もう要素がない場合は、FALSEを返します。 配列に空の要素が含まれる場合は、空の要素に対してFALSEを返します。
<?
$fruit = array("apple", "banana", "grape");
end($fruit);
echo prev($fruit); //banana
echo prev($fruit); //apple
echo (prev($fruit)) ? "true" : "false"; //false
?>
range
ある範囲の整数を有する配列を作成する
unknown
low~highまでの整数の配列を返します。 low > high の場合、順番は high → low となります。 オプションの第3引数要素毎の増加数(PHP5~)のデフォルトは1(正の値のみ指定可)。
<?
#low > high の場合
$numbers = range(9, 0);
print_r($numbers); //9876543210
#low < hight の場合
$numbers = range(0, 9);
print_r($numbers); //0123456789
#アルファベットを配列に格納
$AL = Array();
foreach(range('A', 'G') as $letter){
$AL[] = $letter;
}
print_r($AL); //Array (A, B, C, D, E, F, G )
$al = array();
for($a = 0x60, $i = 1; $i <= 7 ; $i++){
array_push($al, chr($a + $i));
}
print_r($al); //Array (a, b, c, d, e, f, g )
?>
<?
#要素を10毎に出力(PHP5.0.0~)
$numbers = range(0, 100, 10);
print_r($numbers); //Array (0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100)
#上と同じ動作をする要素毎の増加数を指定するユーザー定義関数
function StepRange($low, $high, $step=1){
$ary = Array();
for($i=$low; $i<=$high; $i+=$step){
$ary[] = $i;
}
return $ary;
}
print_r(StepRange(0,100,10)); //Array (0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100)
?>
reset
配列の内部ポインタを先頭に戻す
unknown
配列の内部ポインタを先頭の要素に戻し、配列の最初の要素の値を返します。 配列が空の場合は、FALSEを返します。
<?
$fruit = array("apple", "banana", "grape");
end($fruit); //grape
echo current($fruit);
reset($fruit);
echo current($fruit); //apple
?>