Search

配列の任意の位置に要素を挿入

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($foundprint_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=$i<sizeof($array); $i++) {
    for($j=$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_ary2$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($fpfilesize($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($fpfilesize($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>

関連コンテンツ

Q. このサイトの情報はお役に立ちましたでしょうか?

投票する 投票結果を見る

管理人に【web拍手】を送るweb拍手(1行メッセージも送れます♪)

pagetop

polarized women