TipsTips(配列関連)
- 配列の任意の位置に要素を挿入
- 配列に指定したキーがあるか調べる
- 多次元配列の全要素を展開
- 2次元配列の展開
- 2つの配列の重複する値を削除
- CSVファイルおよび連想配列からプルダウン生成〔添字は0からの連番、OPTGROUPあり〕
- CSVファイルおよび連想配列からプルダウン生成〔添字は配列のキー、OPTGROUPあり〕
配列の任意の位置に要素を挿入
unknown
サンプルを見る<?
/* [関数名] array_insert
* [機 能] 配列の任意の位置へ要素を挿入し、挿入後の配列を返す
* [引 数]
* @param array &$array 挿入される配列(参照渡し)
* @param string $insert 挿入する値
* @param string $pos 挿入位置(先頭は0)
* [返り値]
* @return bool $flag 成功した場合にTRUE、そうでないにFALSEを返す
*/
function array_insert ( &$array, $insert, $pos ) {
//引数$arrayが配列でない場合はFALSEを返す
if (!is_array($array)) return false;
//挿入する位置~末尾まで
$last = array_splice($array, $pos);
//先頭~挿入前位置までの配列に、挿入する値を追加
array_push($array, $insert);
//配列を結合
$array = array_merge($array, $last);
return true;
}
$myArray = Array(1,2,3);
echo nl2br(print_r($myArray,true));
/*
Array
(
[0] => 1
[1] => 2
[2] => 3
)
*/
// 配列の2番目に "aaa" を挿入する
array_insert ( &$myArray, "aaa", 2);
echo nl2br(print_r($myArray,true));
/*
Array
(
[0] => 1
[1] => 2
[2] => aaa
[3] => 3
)
*/
?>
配列に指定したキーがあるか調べる
unknown
サンプルを見る<?
/* [関数名] in_array_key
* [機 能] 配列に指定したキーが含まれるか検索する
* 検索するキーが複数ある場合は配列を指定する
* [引 数]
* @param array or string $key 検索スルキー
* @param array $array 検索対象の配列
* [返り値]
* @return array $found 見つかったキーと値の連想配列を返す
* 見つからなかった場合はFALSEを返す
*/
function in_array_key($key, $array){
$found=Array();
if(!is_array($key)){
while(list($k, $v)=each($array)){
if($key==$k && $k!="") $found[$k]=$v;
}
}else if(is_array($key)){
while(list($k, $v)=each($array)){
for($i=0;$i<count($key);$i++){
if($key[$i]==$k && $k!="") $found[$k]=$v;
}
}
}
return (!$found) ? false : $found;
}
?>
<?
$search_key=Array("a","e");
$search_ary=Array("","a"=>"A","b"=>"B","c"=>"C","e"=>"E");
$found=in_array_key($search_key,$search_ary);
if($found) print_r($found);
else echo "見つかりませんでした";
// Array ( [a]=>A [e]=>E )
?>
多次元配列の全要素を展開
unknown
サンプルを見る<?
//多次元配列
$array=Array (
Array("a1","a2","a3"),
Array("b1","b2","b3"),
Array("c1","c2","c3")
);
$s_tate="";
$s_yoko="";
//全要素を展開
for($i=0 ; $i<sizeof($array); $i++) {
for($j=0 ; $j < sizeof($array[$i]) ; $j++) {
$s_tate.=$array[$j][$i]." ";
$s_yoko.=$array[$i][$j]." ";
}
$s_tate.="<br>";
$s_yoko.="<br>";
}
//$ary[$j][$i]とした場合、縦方向に連結
echo $s_tate;
/*
a1 b1 c1
a2 b2 c2
a3 b3 c3
*/
//$ary[$i][$j]とした場合、横方向に連結
echo $s_yoko;
/*
a1 a2 a3
b1 b2 b3
c1 c2 c3
*/
?>
2次元配列の展開
unknown
サンプルを見る<?
$array=Array(
"ビール"=>Array(
"a"=>"エビス",
"b"=>"スーパードライ",
"c"=>"モルツ"
),
"発泡酒"=>Array(
"x"=>"本生",
"y"=>"淡麗"
)
);
//★連想配列の添字を維持する場合
$array_turn=Array();
foreach($array as $k=>$v){
foreach($v as $kk=>$vv){
$array_turn[$k][$kk]=$vv;
}
}
echo nl2br(print_r($array_turn,true));
/*
Array(
[ビール] => Array(
[a] => エビス
[b] => スーパードライ
[c] => モルツ
)
[発泡酒] => Array(
[x] => 本生
[y] => 淡麗
)
)
*/
//★連想配列の添字を維持せず、0からの連番に振りなおす場合
$array_turn = Array();
foreach($array as $k=>$v){
foreach($v as $vv){
$array_turn[$k][]=$vv;
}
}
echo nl2br(print_r($array_turn,true));
/*
Array(
[ビール] => Array(
[0] => エビス
[1] => スーパードライ
[2] => モルツ
)
[発泡酒] => Array(
[0] => 本生
[1] => 淡麗
)
)
*/
?>
2つの配列の重複する値を削除
unknown
サンプルを見る<?
$array1=array("apple","banana","grape","orange");
$array2=array("apple","orange");
/*
【in_arrayを使う場合】
$unique=array_diff ($array1, $array2); と同じ結果が得られる
*/
$unique=Array();
foreach($array1 as $k=>$v){
//値が$array2になければ、$uniqueに格納
if(!in_array($v, $array2)){
$unique[$k]=$v;
}
}
print_r($unique); // Array ( [1] => banana [2] => grape )
/*
【array_searchを使う場合】
$unique=array_values(array_diff($array1, $array2)); と同じ結果が得られる
*/
$unique=Array();
foreach($array1 as $k=>$v){
if (array_search($v, $array2)===false){
//値が$array2になければ、$uniqueに格納
$unique[]=$v;
}
}
print_r($unique); // Array ( [1] => banana [2] => grape )
?>
CSVファイルおよび連想配列からプルダウン生成
添字は0からの連番、OPTGROUPあり
unknown
food.csv▼選択してください▼ fruit,apple fruit,banana fruit,grape fruit,orange vegitable,potato vegitable,tomato milk
配列→プルダウンを生成する場合(optionのvalueは自動採番)
string make_sel_opts ( $array, $selected )
サンプルを見る
<?
/* [関数名] make_sel_opts
* [機 能] 連想配列からプルダウンを生成
* [説 明] 連想配列のキーを1グループとしてoptgroupタグで括る。
* そのキーの値である配列の値をoptionのtextとして生成した
* プルダウンのHTML文を返す。optionのvalueには'0'からの連番を振る。
* [引 数]
* @param array $arr 連想配列
* @param string $selected デフォルトで選択するインデックス番号(デフォルトは'0')
* @param string $funcChk OnChangeイベントなどを記述(デフォルトは'')
* [返り値]
* @return string $htm 生成されたHTML文
* エラーの場合はFALSEを返す
*/
function make_sel_opts($arr, $selected=0, $funcChk=""){
$idx=0;
if (!is_array($arr)) return false;
$htm="<select ".$funcChk.">\n";
foreach ($arr as $k1=>$v1){
if (is_array($v1)) {
$htm.="<optgroup label='".$k1."'>\n";
foreach($v1 as $v2){
$htm.="<option value='".$idx."'".(($idx==$selected) ? " selected" : "")." style='margin-left:1em;'>".$v2."</option>\n";
$idx++;
}
$htm.="</optgroup>\n";
}else{
$htm.="<option value='".$idx."'".(($idx==$selected) ? " selected" : "").">".$v1."</option>\n";
$idx++;
}
}
$htm.="</select>\n";
return $htm;
}
?>
<form>
<?
$food_ary=Array(
"▼選択してください▼",
"fruit"=>Array(
"apple","banana","grape","orange"),
"vegitable"=>Array("potato","tomato"),
"milk"
);
$funcChk="onChange=\"alert(this.value+'='+this[this.selectedIndex].text)\"";
echo make_sel_opts($food_ary, 2, $funcChk)
?>
</form>
ファイル→連想配列生成→プルダウンを生成する場合(optionのvalueは自動採番)
string fmake_sel_opts ( $filename, $selected )
サンプルを見る
<?
/* [関数名] make_sel_opts
* [機 能] ファイルから連想配列を生成し、プルダウンを生成
* [説 明] カンマ区切りのCSVファイルから連想配列を生成し、
* その連想配列のキーを1グループとしてoptgroupタグで括る。
* そのキーの値である配列の値をoptionのtextとして生成した
* プルダウンのHTML文を返す。optionのvalueには'0'からの連番を振る。
* [引 数]
* @param string $filename CSVファイル名
* @param string $selected デフォルトで選択するインデックス番号(デフォルトは'0')
* @param string $funcChk OnChangeイベントなどを記述(デフォルトは'')
* [返り値]
* @return string $htm 生成されたHTML文
* エラーの場合はFALSEを返す
*/
function fmake_sel_opts($filename, $selected=0, $funcChk="") {
//初期化
$idx=0;
$htm="";
$listData=Array();
//ファイルの存在確認
if (!@file_exists($filename)) return false;
//ファイルからリストデータを配列に読み込む
$fp=@fopen($filename, "r");
while (!@feof($fp)) {
$dat=@fgetcsv($fp, filesize($filename), ",");
if(!$dat[0]) continue;
$listData[$dat[0]][]=$dat[1];
}
@fclose($fp);
if (!@is_array($listData)) return false;
$htm="<select ".$funcChk.">\n";
foreach ($listData as $k1=>$v1) {
if (@is_array($v1) && $v1[0]!="") {
/* グループ化 */
$htm.="<optgroup label='".$k1."'>\n";
foreach($v1 as $v2){
$htm.="<option value='".$idx."'".(($idx==$selected) ? " selected" : "")." style='margin-left:1em;'>".$v2."</option>\n";
$idx++;
}
$htm.="</optgroup>\n";
}else{
$htm.="<option value='".$idx."'".(($idx==$selected) ? " selected" : "").">".$k1."</option>\n";
$idx++;
}
}
$htm.="</select>\n";
return $htm;
}
?>
<form>
<?
$filename="/module/include/dat/food.csv";
$selected="1";
$funcChk="onChange=\"alert(this.value + '=' + this[this.selectedIndex].text)\"";
echo fmake_sel_opts($filename, $selected, $funcChk);
?>
</form>
実行結果
上記の2つの出力結果は同じになります。
<!-- 出力されるHTML文 -->
<form>
<select onchange="alert(this.value + '=' + this[this.selectedIndex].text)">
<option value='0'>▼選択してください▼</option>
<optgroup label='fruit'>
<option value='1' selected='selected' style='margin-left:1em;'>apple</option>
<option value='2' style='margin-left:1em;'>banana</option>
<option value='3' style='margin-left:1em;'>grape</option>
<option value='4' style='margin-left:1em;'>orange</option>
</optgroup>
<optgroup label='vegitable'>
<option value='5' style='margin-left:1em;'>potato</option>
<option value='6' style='margin-left:1em;'>tomato</option>
</optgroup>
<option value='7'>milk</option>
</select>
</form>
CSVファイルおよび連想配列からプルダウン生成
添字は配列のキー、OPTGROUPあり
unknown
food_kv.csv▼選択してください▼ fruit,a,apple fruit,b,banana fruit,g,grape fruit,o,orange vegitable,p,potato vegitable,t,tomato m,milk
連想配列→プルダウンを生成する場合(キーをoptionのvalueにする)
string make_sel_opts_kv ( $array, $selected )
サンプルを見る
<?
/* [関数名] make_sel_opts_kv
* [機 能] 連想配列からプルダウンを生成
* [説 明] 連想配列のキーを1グループとしてoptgroupタグで括る。
* そのキーの値である配列のキーをoptionのvalueに、値をoptionのtext
* としてプルダウンを生成したHTML文を返す。
* [引 数]
* @param array $array 連想配列
* @param string $selected デフォルトで選択するインデックス番号(デフォルトは'0')
* @param string $funcChk OnChangeイベントなどを記述(デフォルトは'')
* [返り値]
* @return string $htm 生成されたHTML文
* エラーの場合はFALSEを返す
*/
function make_sel_opts_kv($array, $selected="0", $funcChk=""){
if (!is_array($array)) return false;
$htm = "<select ".$funcChk.">\n";
foreach ($array as $k1=>$v1) {
if (is_array($v1) && (count($v1)>1)){
$htm .= "<optgroup label='".$k1."'>\n";
foreach($v1 as $k2=>$v2){
$htm .= "<option value='".$k2."'".(($k2==$selected) ? " selected" : "")." style='margin-left:1em;'>".$v2."</option>\n";
}
$htm .= "</optgroup>\n";
}else{
foreach($v1 as $k2=>$v2){
$htm .= "<option value='".$k2."'".(($k2==$selected) ? " selected" : "").">".$v2."</option>\n";
}
}
}
$htm.="</select>\n";
return $htm;
}
?>
<form>
<?
$food_ary = Array(
Array(
""=>"▼選択してください▼"),
"fruit"=>Array("a"=>"apple", "b"=>"banana", "g"=>"grape"),
"vegitable"=>Array("p"=>"potato", "t"=>"tomato"),
Array("m"=>"milk")
);
$funcChk="onChange=\"alert(this.value+'='+this[this.selectedIndex].text)\"";
echo make_sel_opts_kv($food_ary, "p", $funcChk);
?>
</form>
ファイル→連想配列生成→プルダウンを生成する場合(キーをoptionのvalueにする)
string fmake_sel_opts_kv ( $filename, $selected )
サンプルを見る
<?
/* [関数名] make_sel_opts_kv
* [機 能] ファイルから連想配列を生成し、プルダウンを生成
* [説 明] カンマ区切りのCSVファイルから連想配列を生成し、
* その連想配列のキーを1グループとしてoptgroupタグで括る。
* そのキーの値である配列のキーをoptionのvalueに、値をoptionのtext
* として生成したプルダウンのHTML文を返す。
* [引 数]
* @param string $filename CSVファイル名
* @param string $selected デフォルトで選択するインデックス番号(デフォルトは'0')
* @param string $funcChk OnChangeイベントなどを記述(デフォルトは'')
* [返り値]
* @return string $htm 生成されたHTML文
* エラーの場合はFALSEを返す
*/
function fmake_sel_opts_kv($filename, $selected="", $funcChk=""){
//初期化
$listData=Array();
$htm="";
//ファイルの存在確認
if (!@file_exists($filename)) return false;
//ファイルから2次元連想配列を生成
$fp=@fopen($filename, "r");
while (!@feof($fp)) {
$dat=fgetcsv($fp, filesize($filename), ",");
if(!$dat[0]) continue;
if(count($dat)==1){
$listData[]=$dat[0];
}elseif(count($dat)==2){
$listData[$dat[0]]=$dat[1];
}else{
$listData[$dat[0]][$dat[1]]= $dat[2];
}
}
@fclose($fp);
//生成されたデータが配列でないならエラー
if (!@is_array($listData)) return false;
$htm .= "<select ".$funcChk.">\n";
foreach ($listData as $k1 => $v1) {
if (@is_array($v1)) {
//グループ化
$htm .= "<optgroup label='".$k1."'>\n";
foreach($v1 as $k2 => $v2){
$htm .= "<option value='".$k2."'".(($k2==$selected) ? " selected" : "")." style='margin-left:1em;'>".$v2."</option>\n";
}
$htm .= "</optgroup>\n";
}else{
$htm .= "<option value='".$k1."'".(($k1==$selected) ? " selected" : "").">".$v1."</option>\n";
}
}
$htm .= "</select>\n";
return $htm;
}
?>
<form>
<?
$filename="/module/include/dat/food_kv.csv";
$selected="m";
$funcChk="onChange=\"alert(this.value + '=' + this[this.selectedIndex].text)\"";
echo fmake_sel_opts_kv($filename, $selected, $funcChk);
?>
</form>
実行結果
上記の2つの出力結果は同じになります。
<!-- 出力されるHTML文 -->
<form>
<select onchange="alert(this.value + '=' + this[this.selectedIndex].text)">
<option value='0' selected>▼選択してください▼</option>
<optgroup label='fruit'>
<option value='a' style='margin-left:1em;'>apple</option>
<option value='b' style='margin-left:1em;'>banana</option>
<option value='g' style='margin-left:1em;'>grape</option>
<option value='o' style='margin-left:1em;'>orange</option>
</optgroup>
<optgroup label='vegitable'>
<option value='p' style='margin-left:1em;'>potato</option>
<option value='t' style='margin-left:1em;'>tomato</option>
</optgroup>
<option value='m' selected>milk</option>
</select>
</form>