ExcelをPHPで読み込んで1行目を連想配列のキーにするクラス書いたよ。


自前テンプレートでメタタグ自動出し分けして、
ウマウマすれば良いじゃない。


以前書いた[PHPでExcelファイルを読み込んで配列にするまでのサムシング](http://qiita.com/wilf312/items/5d70f597aa48855d4f9b)をもっと使いやすくするために、
excelでメタタグ、タイトル周りをSCRIPT_NAMEから現在のページデータを取得するクラスを書いてみました。

## 使用イメージ
1行目をキーに配列を作成していく。

![スクリーンショット_2014_01_10_3_21-6.png](https://qiita-image-store.s3.amazonaws.com/0/5472/bde5e9f9-0bca-3094-a8c4-ed87335e97d8.png "スクリーンショット_2014_01_10_3_21-6.png")

アクセスしたページによってメタタグのデータを以下のように出し分けるイメージ。

![local_daihatsu_pickles_tv_app_util_excel_php-2.png](https://qiita-image-store.s3.amazonaws.com/0/5472/d268eb6f-0a38-65ba-74a9-a1b222b7a325.png "local_daihatsu_pickles_tv_app_util_excel_php-2.png")


## 準備するもの
・ excelファイル
・ PHPExcelライブラリ （ http://phpexcel.codeplex.com/releases/view/107442 ）
・ php環境


## ソース


```php:excel.php
<?php

// Excelシート番号
define('XLS_META',       0); // 今回使うシート
define('XLS_SNS',        1);
define('XLS_ITEM_LIST',  2);

// ----------------- 呼び出し
$scriptName = $_SERVER[“SCRIPT_NAME”];
$scriptName = '/index.html'; // デバッグ用

// 全体の配列を取得する
$metaData = EXCEL::getXls(dirname(__FILE__). '/myxls.xlsx', XLS_META);

// 現在のページデータ取得
$pageData = $metaData[$scriptName];

print '<pre>';

echo '現在ページ => '. $scriptName . “\n\n”;

// ページデータを出力
var_dump($pageData);
print '</pre>'; 


// ----------------- Excel操作クラス
/**
 *
 * @author  wilf312 <wilf33312@gmail.com>
 * @create  2013/05/30
 * @version v 0.5 2013/05/30 02:17:19 Okada
 **/

Class Excel {
    public static function getXls($aReadFilePath, $aSheetNum)
    {

        // ライブラリファイルの読み込み
        require_once dirname(__FILE__). "/../libs/PHPExcel/Classes/PHPExcel/IOFactory.php";

        // ファイルの存在チェック
        if (!file_exists($aReadFilePath)) {
            exit($aReadFilePath. "が見つかりません。" . EOL);
        }
        // xlsxをPHPExcelに食わせる
        $objPExcel = PHPExcel_IOFactory::load($aReadFilePath);

        // 配列形式で返す
        return Excel::getTitleArray($objPExcel->setActiveSheetIndex($aSheetNum)->toArray(null,true,true,true));
    }

    // 1行目を階層2の配列のキーにページの配列を作成
    // 階層2への配列アクセスはSCRIPT_NAMEを使用できるようにURLを配列のキーにする
    public static function getTitleArray($aTableData)
    {

        $titleArray = array();
        $keyData = array();
        $isFirst = true;


        // 配列の整形
        foreach($aTableData as $k => $v) {

            if ($isFirst) {

                // タイトル行を取得
                $keyData = $v;
                $isFirst = false;

            } else {

                $_simpleData = array(); // 仮データ保存配列

                // タイトル行のフィールド名を取得して配列を作成する。
                foreach($keyData as $k2 => $v2) {

                    // IDの場合だけ 値をfloatからintに変換しておく
                    if ($v2 === "id") {
                        $_simpleData[$v2] = (int)$v[$k2];

                    } else {
                        $_simpleData[$v2] = $v[$k2];
                    }
                }
                // 作成した配列を追加
                $titleArray[$_simpleData["url"]] = $_simpleData;
            }
        }

        return $titleArray;
    }
}
?>
```



## 余談

明日は今回のexcelからページデータを取得して
それを元にPHPのテンプレートをさっくり書いていきます。



こちらでは皆さんからの皮肉・不平・不満・罵詈雑言などを募集しています。
お気づきの点がございましたら、お気軽にコメントいただけると大変嬉しいです。
よろしくお願いいたします。

・ Twitter
[@wilf](https://twitter.com/wilf312)
・ e-mail
wilf33312@gmail.com