-
今回は生成する「チャート」の位置の調整について説明したいと思います。
PhpSpreadsheet の説明の初回の記事で用いたプログラムをそのまま利用します。(以下のリンク)
⇒PHP PhpSpreadsheet ワークシート上にチャート(グラフ)を作成する方法について(PhpSpreadsheet\Chart)
<?php // ライブラリ読込 require '../vendor/autoload.php'; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Chart\Chart; use PhpOffice\PhpSpreadsheet\Chart\DataSeries; use PhpOffice\PhpSpreadsheet\Chart\DataSeriesValues; use PhpOffice\PhpSpreadsheet\Chart\PlotArea; use PhpOffice\PhpSpreadsheet\Chart\Title; use PhpOffice\PhpSpreadsheet\IOFactory; // Spreadsheetオブジェクト生成 $objSpreadsheet = new Spreadsheet(); // ワークシートオブジェクト取得 $objWorksheet = $objSpreadsheet->getActiveSheet(); // チャート用テストデータ生成 $objWorksheet->fromArray( array( array('売上' , 2016, 2017, 2018, 2019, 2020), array('商品1', 12, 15, 21, 18, 20), ) ); // X軸ラベルの指定 $arrCategorysDataSeries = array( new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$B$1:$F$1', NULL, 5), // 2016 to 2020 ); // 描画データの指定 $arrDataSeriesValues = array( new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$B$2:$F$2', NULL, 5), ); // チャート・データシリーズの生成 $objSeries = new DataSeries( DataSeries::TYPE_LINECHART, // plotType NULL, // plotGrouping(DataSeries::GROUPING_STANDARD) range(0, count($arrDataSeriesValues) - 1), // plotOrder array(), // plotLabel $arrCategorysDataSeries, // plotCategory $arrDataSeriesValues // plotValues ); // プロットエリアにチャート・データシリーズに設定 $objPlotArea = new PlotArea(NULL, array($objSeries)); // チャート・タイトル生成 $objTitle = new Title('売上データ'); // チャート生成 $objChart = new Chart( 'chart1', // name $objTitle, // title NULL, // legend $objPlotArea, // plotArea TRUE, // plotVisibleOnly 0, // displayBlanksAs NULL, // xAxisLabel NULL // yAxisLabel ); // ワークシート内のチャート位置設定 $objChart->setTopLeftPosition('A6'); // 左上 $objChart->setBottomRightPosition('G18'); // 右下 // ワークシートにチャート追加 $objWorksheet->addChart($objChart); // [test-g-1.xlsx]:Excel2007形式で保存する $objWriter = IOFactory::createWriter($objSpreadsheet, 'Xlsx'); $objWriter->setIncludeCharts(TRUE); $objWriter->save('test-g-1.xlsx'); exit(); ?>出力されたエクセルファイルを見てみると以下の様になります。
このプログラムの59,60行目でチャート位置設定を行っていますが、 チャートオブジェクトの setTopLeftPosition、setBottomRightPosition メソッドの引数にはセル位置の後に X方向、Y方向 の引数があります。
メソッドの引数は以下の様に定義されています。public function setTopLeftPosition($cell, $xOffset = null, $yOffset = null) public function setBottomRightPosition($cell, $xOffset = null, $yOffset = null) $cell :セルアドレス $xOffset:X方向のオフセット(相対値:ピクセル値?) $yOffset:Y方向のオフセット(相対値:ピクセル値?)
X方向、Y方向のオフセットを設定してプログラムを直してみます。<?php // ライブラリ読込 require '../vendor/autoload.php'; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Chart\Chart; use PhpOffice\PhpSpreadsheet\Chart\DataSeries; use PhpOffice\PhpSpreadsheet\Chart\DataSeriesValues; use PhpOffice\PhpSpreadsheet\Chart\PlotArea; use PhpOffice\PhpSpreadsheet\Chart\Title; use PhpOffice\PhpSpreadsheet\IOFactory; // Spreadsheetオブジェクト生成 $objSpreadsheet = new Spreadsheet(); // ワークシートオブジェクト取得 $objWorksheet = $objSpreadsheet->getActiveSheet(); // チャート用テストデータ生成 $objWorksheet->fromArray( array( array('売上' , 2016, 2017, 2018, 2019, 2020), array('商品1', 12, 15, 21, 18, 20), ) ); // X軸ラベルの指定 $arrCategorysDataSeries = array( new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, 'Worksheet!$B$1:$F$1', NULL, 5), // 2016 to 2020 ); // 描画データの指定 $arrDataSeriesValues = array( new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, 'Worksheet!$B$2:$F$2', NULL, 5), ); // チャート・データシリーズの生成 $objSeries = new DataSeries( DataSeries::TYPE_LINECHART, // plotType NULL, // plotGrouping(DataSeries::GROUPING_STANDARD) range(0, count($arrDataSeriesValues) - 1), // plotOrder array(), // plotLabel $arrCategorysDataSeries, // plotCategory $arrDataSeriesValues // plotValues ); // プロットエリアにチャート・データシリーズに設定 $objPlotArea = new PlotArea(NULL, array($objSeries)); // チャート・タイトル生成 $objTitle = new Title('売上データ'); // チャート生成 $objChart = new Chart( 'chart1', // name $objTitle, // title NULL, // legend $objPlotArea, // plotArea TRUE, // plotVisibleOnly 0, // displayBlanksAs NULL, // xAxisLabel NULL // yAxisLabel ); // ワークシート内のチャート位置設定 $objChart->setTopLeftPosition('A6', 32, 10); // 左上 $objChart->setBottomRightPosition('G18', 32, 10); // 右下 // ワークシートにチャート追加 $objWorksheet->addChart($objChart); // [test-g-9-2.xlsx]:Excel2007形式で保存する $objWriter = IOFactory::createWriter($objSpreadsheet, 'Xlsx'); $objWriter->setIncludeCharts(TRUE); $objWriter->save('test-g-9-2.xlsx'); exit(); ?>オフセットはピクセルの値の様なので、左上、右下共にX方向は32ピクセルで、Y方向は10ピクセルにしました。
32ピクセル及び10ピクセルはセルの幅が64ピクセルで、高さが20ピクセルなので半分の値です。
出力されたエクセルファイルを見てみると以下の様になります。
指定された値の位置に行っている様な感じですが、右下が少し怪しいです。 ここは出力されたチャートの位置をみて微調整が必要かもしれません。
PR -
今回は生成する「チャート」の位置の調整について説明したいと思います。
PHPExcel_Chart の説明の初回の記事で用いたプログラムをそのまま利用します。(以下のリンク)
⇒PHP PHPExcel ワークシート上にチャート(グラフ)を作成する方法について(PHPExcel_Chart)
<?php // ライブラリ読込 require_once './PHPExcel-1.8/Classes/PHPExcel.php'; // PHPExcelオブジェクト作成 $objPHPExcel = new PHPExcel(); // ワークシートオブジェクト取得 $objWorksheet = $objPHPExcel->getActiveSheet(); // チャート用テストデータ生成 $objWorksheet->fromArray( array( array('売上' , 2016, 2017, 2018, 2019, 2020), array('商品1', 12, 15, 21, 18, 20), ) ); // X軸ラベルの指定 $arrCategorysDataSeries = array( new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$B$1:$F$1', NULL, 5), // 2016 to 2020 ); // 描画データの指定 $arrDataSeriesValues = array( new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$B$2:$F$2', NULL, 5), ); // チャート・データシリーズの生成 $objSeries = new PHPExcel_Chart_DataSeries( PHPExcel_Chart_DataSeries::TYPE_LINECHART, // plotType NULL, // plotGrouping range(0, count($arrDataSeriesValues) - 1), // plotOrder NULL, // plotLabel $arrCategorysDataSeries, // plotCategory $arrDataSeriesValues // plotValues ); // プロットエリアにチャート・データシリーズに設定 $objPlotArea = new PHPExcel_Chart_PlotArea(NULL, array($objSeries)); // チャート・タイトル生成 $objTitle = new PHPExcel_Chart_Title('売上データ'); // チャート生成 $objChart = new PHPExcel_Chart( 'chart1', // name $objTitle, // title NULL, // legend $objPlotArea, // plotArea TRUE, // plotVisibleOnly 0, // displayBlanksAs NULL, // xAxisLabel NULL // yAxisLabel ); // ワークシート内のチャート位置設定 $objChart->setTopLeftPosition('A6'); // 左上 $objChart->setBottomRightPosition('G18'); // 右下 // ワークシートにチャート追加 $objWorksheet->addChart($objChart); // [test-g-1.xlsx]:Excel2007形式で保存する $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, "Excel2007"); $objWriter->setIncludeCharts(TRUE); $objWriter->save('test-g-1.xlsx'); exit(); ?>出力されたエクセルファイルを見てみると以下の様になります。
このプログラムの51,52行目でチャート位置設定を行っていますが、 チャートオブジェクトの setTopLeftPosition、setBottomRightPosition メソッドの引数にはセル位置の後に X方向、Y方向 の引数があります。
メソッドの引数は以下の様に定義されています。public function setTopLeftPosition($cell, $xOffset = null, $yOffset = null) public function setBottomRightPosition($cell, $xOffset = null, $yOffset = null) $cell :セルアドレス $xOffset:X方向のオフセット(相対値:ピクセル値?) $yOffset:Y方向のオフセット(相対値:ピクセル値?)
X方向、Y方向のオフセットを設定してプログラムを直してみます。<?php // ライブラリ読込 require_once './PHPExcel-1.8/Classes/PHPExcel.php'; // PHPExcelオブジェクト作成 $objPHPExcel = new PHPExcel(); // ワークシートオブジェクト取得 $objWorksheet = $objPHPExcel->getActiveSheet(); // チャート用テストデータ生成 $objWorksheet->fromArray( array( array('売上' , 2016, 2017, 2018, 2019, 2020), array('商品1', 12, 15, 21, 18, 20), ) ); // X軸ラベルの指定 $arrCategorysDataSeries = array( new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$B$1:$F$1', NULL, 5), // 2016 to 2020 ); // 描画データの指定 $arrDataSeriesValues = array( new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$B$2:$F$2', NULL, 5), ); // チャート・データシリーズの生成 $objSeries = new PHPExcel_Chart_DataSeries( PHPExcel_Chart_DataSeries::TYPE_LINECHART, // plotType NULL, // plotGrouping range(0, count($arrDataSeriesValues) - 1), // plotOrder NULL, // plotLabel $arrCategorysDataSeries, // plotCategory $arrDataSeriesValues // plotValues ); // プロットエリアにチャート・データシリーズに設定 $objPlotArea = new PHPExcel_Chart_PlotArea(NULL, array($objSeries)); // チャート・タイトル生成 $objTitle = new PHPExcel_Chart_Title('売上データ'); // チャート生成 $objChart = new PHPExcel_Chart( 'chart1', // name $objTitle, // title NULL, // legend $objPlotArea, // plotArea TRUE, // plotVisibleOnly 0, // displayBlanksAs NULL, // xAxisLabel NULL // yAxisLabel ); // ワークシート内のチャート位置設定 $objChart->setTopLeftPosition('A6', 32, 10); // 左上 $objChart->setBottomRightPosition('G18', 32, 10); // 右下 // ワークシートにチャート追加 $objWorksheet->addChart($objChart); // [test-g-9-2.xlsx]:Excel2007形式で保存する $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, "Excel2007"); $objWriter->setIncludeCharts(TRUE); $objWriter->save('test-g-9-2.xlsx'); exit(); ?>オフセットはピクセルの値の様なので、左上、右下共にX方向は32ピクセルで、Y方向は10ピクセルにしました。
32ピクセル及び10ピクセルはセルの幅が64ピクセルで、高さが20ピクセルなので半分の値です。
出力されたエクセルファイルを見てみると以下の様になります。
指定された値の位置に行っている様な感じですが、右下が少し怪しいです。 ここは出力されたチャートの位置をみて微調整が必要かもしれません。
-
以前、セルの罫線を設定する処理で以下の様なスクリプトで行っていましたが、どうも罫線が出力されない様です。<?php // ライブラリ読込 require_once './PHPExcel-1.8/Classes/PHPExcel.php'; // PHPExcelオブジェクト作成 $objBook = new PHPExcel(); // ワークシートオブジェクト $objSheet = $objBook->getActiveSheet(); // スタイルオブジェクト取得([B2]セル) $objStyle = $objSheet->getStyle('B2'); // ボーダーオブジェクト取得([B2]セル) $objBorders = $objStyle->getBorders(); // ボーダー全て(Top, Bottom, Left, Right)を「細い線:BORDER_THICK」に設定 $objBorders->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THICK); $objBorders->getBottom()->setBorderStyle(PHPExcel_Style_Border::BORDER_THICK); $objBorders->getLeft()->setBorderStyle(PHPExcel_Style_Border::BORDER_THICK); $objBorders->getRight()->setBorderStyle(PHPExcel_Style_Border::BORDER_THICK); // [test12-1.xlsx]:Excel2007形式で保存する $objWriter = PHPExcel_IOFactory::createWriter($objBook, "Excel2007"); $objWriter->save('test12-1.xlsx'); exit(); ?>この処理では罫線が出力されないので、スタイルオブジェクトの applyFromArray() メソッドを使用することで 確実に処理できる様です。
このメソッドの引数は配列データですが、以下の様な指定をします。array( 'borders' => array( 'top' => array( 'style' => PHPExcel_Style_Border::BORDER_THIN // ボーダーの定数 ,['color' => array( 'rgb' => 'xxxxxx' ) ] // 色は未指定はデフォルト(黒) ), 'bottom' => array( 'style' => PHPExcel_Style_Border::BORDER_THIN ,['color' => array( 'rgb' => 'xxxxxx' ) ] ), 'left' => array( 'style' => PHPExcel_Style_Border::BORDER_THIN ,['color' => array( 'rgb' => 'xxxxxx' ) ] ), 'right' => array( 'style' => PHPExcel_Style_Border::BORDER_THIN ,['color' => array( 'rgb' => 'xxxxxx' ) ] ), ) )それではこのメソッドを使って罫線を出力してみます。
<?php // ライブラリ読込 require_once './PHPExcel-1.8/Classes/PHPExcel.php'; // PHPExcelオブジェクト作成 $objBook = new PHPExcel(); // ワークシートオブジェクト $objSheet = $objBook->getActiveSheet(); // スタイルオブジェクト取得([B2]セル) $objStyle = $objSheet->getStyle('B2'); // 引き数 $arrStyle = array( 'borders' => array( 'top' => array( 'style' => PHPExcel_Style_Border::BORDER_THICK, 'color' => array( 'rgb' => 'ff0000' ) ), 'right' => array( 'style' => PHPExcel_Style_Border::BORDER_THICK, 'color' => array( 'rgb' => '00ff00' ) ), 'left' => array( 'style' => PHPExcel_Style_Border::BORDER_THICK, 'color' => array( 'rgb' => '0000ff' ) ), 'bottom' => array( 'style' => PHPExcel_Style_Border::BORDER_THICK, 'color' => array( 'rgb' => 'ff00ff' ) ) ) ); // セルの罫線スタイル設定 $objStyle->applyFromArray($arrStyle); // スタイルオブジェクト取得([B4:F4]セル) $objStyle = $objSheet->getStyle('B4:F4'); // セルの罫線スタイル設定 $objStyle->applyFromArray($arrStyle); // [test12-1.xlsx]:Excel2007形式で保存する $objWriter = PHPExcel_IOFactory::createWriter($objBook, "Excel2007"); $objWriter->save('test12-1.xlsx'); exit(); ?>出力されたエクセルファイルを見てみると以下の様になります。
尚 applyFromArray() の配列引数の中で、'top' 'right' 'left' 'bottom' が同一の指定であれば 'allborders' と指定することもできます。<?php // ライブラリ読込 require_once './PHPExcel-1.8/Classes/PHPExcel.php'; // PHPExcelオブジェクト作成 $objBook = new PHPExcel(); // ワークシートオブジェクト $objSheet = $objBook->getActiveSheet(); // スタイルオブジェクト取得([B2]セル) $objStyle = $objSheet->getStyle('B2'); // 引き数 $arrStyle = array( 'borders' => array( 'allborders' => array( 'style' => PHPExcel_Style_Border::BORDER_THICK, 'color' => array( 'rgb' => 'ff0000' ) ) ) ); // セルの罫線スタイル設定 $objStyle->applyFromArray($arrStyle); // スタイルオブジェクト取得([B4:F4]セル) $objStyle = $objSheet->getStyle('B4:F4'); // セルの罫線スタイル設定 $objStyle->applyFromArray($arrStyle); // [test12-1.xlsx]:Excel2007形式で保存する $objWriter = PHPExcel_IOFactory::createWriter($objBook, "Excel2007"); $objWriter->save('test12-2.xlsx'); exit(); ?>出力されたエクセルファイルを見てみると以下の様になります。指定セルが全て同じ罫線の状態になります。
-
数年前に Twitter のアカウントを登録はしていたのですが、ほとんど使っていませんでした。
そこで久々に使ってみようかと思いまして、 ログインして見てみると、アカウントのユーザーネーム(名前のことですが)が実際の自分の氏名のままでした。
これではちょっとと思い、ニックネーム「おやじプログラマー」に変えようかなとプロフィール編集をやってみました。
しかし、プロフィール編集にはユーザーネーム(名前)の変更個所が出てきません。 小1時間かけて、アカウントのメンテナンスの項目などを見てもありません。
これは弱ったなと思ってネットで調べると、プロフィール編集で「プロフィール」が入力されていないと ユーザーネームの編集ができない様です。
「プロフィール」の登録は後でもいいかなとスルーしていたため、こんなことになりました。
ところで Twitter の 「ユーザーネーム」 と 「ユーザー名」 ですが Twitter 上で表示されるアカウントの 「○○○○○@●●●●●」で最初の「○○○○○」の部分が 「ユーザーネーム」 で 「●●●●●」の部分が 「ユーザー名」 です。なんとも分かりにくいですね。
それでは、 「ユーザーネーム」 の変更方法を以下に説明します。
最初にログインを行ってから、メニューの「ホーム」をクリックしてプロフィール画像の部分をクリックします。 (以下の画像で赤枠で囲ったところ)
次に「プロフィール編集」のボタンをクリックします。 (以下の画像で赤枠で囲ったところ)
「プロフィール編集」画面がポップアップしますので、ここで入力します。
「プロフィール編集」を行った後で、初めてのツイートを行いました。 今後、ブログの更新案内はこちらで行っていきたいと思います。
-
変数の整数型への変換を行う関数である intval について説明します。
■intval関数
先ずは intval 関数ですが以下の様な定義になっています。(PHP の正式な説明サイトより)
intval ( mixed $var [, int $base = 10 ] ) : int [説明] 変数の整数としての値を取得する。 指定された値 base を基数(デフォルトは 10)とする、var の int としての値を返します。 オブジェクトに intval() を使用することはできません。その場合は E_NOTICE レベルのエラーを発して 1 を返します。 [パラメータ ] $var :整数に変換する値(変数)。 $base :変換のための基数。 [返り値] 成功時は var の整数値、失敗時は 0。 空の配列の場合は 0、空でない配列の場合は 1 を返します。
それでは、簡単な例のスクリプトを以下に示します。<?php /* f3-intval-1.php */ // 文字列で数値として成り立つデータを設定 $data = "100"; // 整数変換 $intData = intval($data); // 結果を表示 var_dump($intData); </html>
これをWindowsコマンドプロンプトで実行すると以下の表示になります。
C:\xampp\htdocs\_test>php f3-intval-1.php int(100)
■intval関数を使った各種の例
isset関数を使った、いろんな場合に付いて調べてみます。
<?php /* f3-intval-2.php */ var_dump(intval(100)); // 整数 var_dump(intval(100.5)); // 浮動小数点数 var_dump(intval("100")); // 文字列の整数形式 var_dump(intval("100.5")); // 文字列の浮動小数点数形式 var_dump(intval("")); // 空文字列 echo "\n"; var_dump(intval(true)); // boolean:true var_dump(intval(false)); // boolean:false var_dump(intval(null)); // null echo "\n"; var_dump(intval(array())); // 空の配列 var_dump(intval(array("a", "b"))); // 中身のある配列 echo "\n"; var_dump(intval("abcd")); // 数値を表現しない文字列(半角) var_dump(intval("あいう")); // 数値を表現しない文字列(全角) </html>これをWindowsコマンドプロンプトで実行すると以下の表示になります。 (... 以降は説明で付けただけです。)
C:\xampp\htdocs\_test>php f3-intval-2.php int(100) ... 整数 int(100) ... 浮動小数点数 int(100) ... 文字列の整数形式 int(100) ... 文字列の浮動小数点数形式 int(0) ... 空文字列 int(1) ... boolean:true int(0) ... boolean:false int(0) ... null int(0) ... 空の配列 int(1) ... 中身のある配列 int(0) ... 数値を表現しない文字列(半角) int(0) ... 数値を表現しない文字列(全角)null が「0」に変換され、配列の中身の有り無しで「1」「0」が変換されるのが分かります。
また、一番注意が必要なのは数値を表現できない文字列は「0」変換されることです。 この性質を暗黙の了解的に使って「0」だからと処理をするのはあまり良くないと思われます。
(処理の結果か、もしくはバグでそうなることがありますが、なるべく避けるべきは。)
■intval関数とデータ型の注意点
intval 関数で返される値は int型 であり、文字列型のデータと比較する場合は注意が必要です。
以下に 比較演算子 による違いをスクリプトで示します。<?php /* f3-intval-3.php */ // Windowsコマンドプロンプトで[XAMPP]のPHPで表示を Shift-JIS にする為の設定 ob_start(function($buf){ return mb_convert_encoding($buf, 'SJIS', 'UTF-8'); }); // 数字で数値を宣言 $strData = "100"; // int型数値に変換 $intData = intval($strData); // 単なる比較 echo "単なる比較 : "; if ($strData == $intData) { echo "データは一致する。\n"; } else { echo "データは一致しない。\n"; } // データ型も含めた比較 echo "データ型も含めた比較 : "; if ($strData === $intData) { echo "データは一致する。\n"; } else { echo "データは一致しない。\n"; } ?>これをWindowsコマンドプロンプトで実行すると以下の表示になります。
C:\xampp\htdocs\_test>php f3-intval-3.php 単なる比較 : データは一致する。 データ型も含めた比較 : データは一致しない。
ここで 比較演算子 の動きについて注意が必要で、 比較演算子 の 前 と 後 が共に数値形式の文字列の場合、 または、どちらか一方が数値形式の文字列の場合に、数値に変換して比較が行われます。 このため、上記の例で「$strData」は文字列の "100" ですが、数値の 100 として扱われ、比較が行われた結果、等しいものと判断されます。
但し、「===」「!==」の 比較演算子 はデータ型を含めての比較になるため、上記では等しくないと判断されます。
以下に 比較演算子 「==」の例を示します。<?php /* f3-intval-4.php */ var_dump( 100 == "100" ); var_dump( 100 == "00100" ); var_dump( 100 == " 100" ); var_dump( 100 == "100.5" ); var_dump( 0 == "aaa" ); ?>
これをWindowsコマンドプロンプトで実行すると以下の表示になります。
C:\xampp\htdocs\_test>php f3-intval-4.php bool(true) bool(true) bool(true) bool(false) bool(true)
文字列の部分が数値に変換されて判定されているのが分かります。最後の "aaa" は「0」に変換されるので等しくなります。
ところで、この数値への変換は 比較演算子 の他に switch でも行われるので更に注意が必要です。 以下のスクリプトを見て下さい。<?php /* f3-intval-5.php */ // Windowsコマンドプロンプトで[XAMPP]のPHPで表示を Shift-JIS にする為の設定 ob_start(function($buf){ return mb_convert_encoding($buf, 'SJIS', 'UTF-8'); }); // 仮の swicth の判定値の宣言 $strSwicth = "a"; // 文字列のみの判断 switch ($strSwicth) { case "a": echo 'swicth で「"a"」の判断'."\n"; break; case "b": echo 'swicth で「"b"」の判断'."\n"; break; } // 最初に数値[0]の判断後、文字列の判断 switch ($strSwicth) { case 0: echo 'swicth で「0」の判断'."\n"; break; case "a": echo 'swicth で「"a"」の判断'."\n"; break; case "b": echo 'swicth で「"b"」の判断'."\n"; break; } ?>これをWindowsコマンドプロンプトで実行すると以下の表示になります。
C:\xampp\htdocs\_test>php f3-intval-5.php swicth で「"a"」の判断 swicth で「0」の判断
最初の switch 文では 「case "a":」の所でヒットしますが、 2番目の switch 文では 「case 0:」のところで判定する値が数値なので「$strSwicth」を数値変換し "a" は数値ではないので「0」に変換され そのためそこでヒットする様になります。