LoginSignup
25
27

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-01-09

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

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

使用イメージ

1行目をキーに配列を作成していく。

スクリーンショット_2014_01_10_3_21-6.png

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

local_daihatsu_pickles_tv_app_util_excel_php-2.png

準備するもの

・ excelファイル
・ PHPExcelライブラリ ( http://phpexcel.codeplex.com/releases/view/107442
・ 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
・ e-mail
wilf33312@gmail.com

25
27
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
27