PHPでHTML文字列を作成して変数に格納する方法とob_start関数を使って、PHPの変数に格納する方法

PHP-HTML-String

こんにちはフロントエンドエンジニアのまさにょんです!

今回は、PHPでHTML文字列を作成して変数に格納する方法とob_start関数を使って、PHPの変数に格納する方法について解説していきます。

PHPでHTMLを作成して、PHPの変数に格納する方法

PHPでHTMLを作成して、PHPの変数に格納する方法として、2つの方法を紹介していきます。

PHPで動的に加工処理とHTML文字列を結合しながら変数に格納する方法

最初に紹介するのは、必要なデータをPHPで動的に組み込みながらHTMLを文字列として、結合しながら作成する方法です。

SampleCodeでは、SelectBoxを動的に作成しています。

<?php

$data_set = [
    (object)['group' => '日本', 'city' => '東京'],
    (object)['group' => '日本', 'city' => '大阪'],
    (object)['group' => 'ドイツ', 'city' => 'ベルリン'],
    (object)['group' => 'ドイツ', 'city' => 'ミュンヘン'],
    (object)['group' => 'アメリカ', 'city' => 'ニューヨーク'],
    (object)['group' => 'アメリカ', 'city' => 'ロサンゼルス'],
];

$group_array = [];

$city_info = [];

foreach ($data_set as $data) {

    $group_name = $data->group;
    
    // group_arrayにグループ名が登録されていなければ、グループ名を登録する
    if (!in_array($group_name, $group_array)) array_push($group_array, $group_name);

    // グループ名リストから、key(index)を取得する
    $group_key = array_search($group_name, $group_array);

    $city_obj = (object)[];
    $city_obj->city = $data->city;
    $city_obj->group_key = $group_key;
    array_push($city_info, $city_obj);
}

// 1. 動的に加工処理とHTML文字列を結合しながら変数に格納する
$select_box = '<select id="world-city">';

// グループ分けされたSelectBoxを作成する
foreach ($group_array as $key => $group) {
    
    $select_box .= "<optgroup label='{$group}'>";
    
    foreach ($city_info as $city_obj) {
        if ($city_obj->group_key == $key) {
            $select_box .= "<option>{$city_obj->city}</option>";
        }
    }
    $select_box .= '</optgroup>';
}

$select_box .= '</select>';

echo $select_box;

// [ 実行結果 ]
// <select id="world-city">
//     <optgroup label='日本'>
//         <option>東京</option>
//         <option>大阪</option>
//     </optgroup>
//     <optgroup label='ドイツ'>
//         <option>ベルリン</option>
//         <option>ミュンヘン</option>
//     </optgroup>
//     <optgroup label='アメリカ'>
//         <option>ニューヨーク</option>
//         <option>ロサンゼルス</option>
//     </optgroup>
// </select>

ob_start関数を使って、HTMLをバッファーデータとして変数に格納する

先述のPHPで動的に加工処理とHTML文字列を結合しながら変数に格納する方法は、

HTMLを文字列として扱いながら組み立て・結合していくという作業が面倒にも思えます。

ob_start関数を使って、HTMLをバッファーデータとして変数に格納して、出力する方法もあります。

ちなみに、obとは、output buffering(出力バッファリング)の略です。

<?php

$data_set = [
    (object)['group' => '日本', 'city' => '東京'],
    (object)['group' => '日本', 'city' => '大阪'],
    (object)['group' => 'ドイツ', 'city' => 'ベルリン'],
    (object)['group' => 'ドイツ', 'city' => 'ミュンヘン'],
    (object)['group' => 'アメリカ', 'city' => 'ニューヨーク'],
    (object)['group' => 'アメリカ', 'city' => 'ロサンゼルス'],
];

$group_array = [];
$city_info = [];

foreach ($data_set as $data) {

    $group_name = $data->group;
    
    // group_arrayにグループ名が登録されていなければ、グループ名を登録する
    if (!in_array($group_name, $group_array)) array_push($group_array, $group_name);

    // グループ名リストから、key(index)を取得する
    $group_key = array_search($group_name, $group_array);

    $city_obj = (object)[];
    $city_obj->city = $data->city;
    $city_obj->group_key = $group_key;
    array_push($city_info, $city_obj);
}

// 1. HTMLをバッファーデータとして取得し始める
ob_start();

?>
<select id="world-city" multiple>
<?php
// グループ分けされたSelectBoxを作成する
foreach ($group_array as $key => $group) { ?>
    <optgroup label="<?php echo $group ?>">
        <?php
        foreach ($city_info as $city_obj) {
            if ($city_obj->group_key == $key) { ?>
                <option><?php echo $city_obj->city ?></option>
            <?php
            }
        }
        ?>
    </optgroup> <?php
} ?>
</select>
<?php

// 2. 出力のバッファを開始する
$select_box = ob_get_contents();

// 3. バッファーデータをクリーンナップする
ob_end_clean();

echo $select_box;

// [ 実行結果 ]

// <select id="world-city" multiple>
//     <optgroup label="日本">
//         <option>東京</option>
//         <option>大阪</option>
//     </optgroup>         
//     <optgroup label="ドイツ">
//         <option>ベルリン</option>
//         <option>ミュンヘン</option>
//     </optgroup>
//     <optgroup label="アメリカ">
//         <option>ニューヨーク</option>
//         <option>ロサンゼルス</option>
//     </optgroup>     
// </select>

Twitterやってます!Follow Me!

神聖グンマー帝国の逆襲🔥

神聖グンマー帝国の科学は、世界一ぃぃぃぃぃぃ!!!!!

PHP / Laravel書籍

最近の投稿