サンプル・プログラムの実行例
サンプル・プログラム
array2file.php | サンプル・プログラム本体。 |
準備
34: //表示幅(ピクセル)
35: define('WIDTH', 600);
36:
37: //配列
38: $Items = array(
39: array('name'=>'武田信虎', 'birth'=>1494, 'death'=>1574, 'comment'=>'甲斐の守護大名・戦国大名。武田信玄の父。'),
40: array('name'=>'フランシスコ・ザビエル', 'birth'=>1506, 'death'=>1552, 'comment'=>'キリスト教宣教師。イグナティウス=デ=ロヨラとともにイエズス会を設立、鹿児島に上陸し、日本に初めてキリスト教を伝える。'),
41: array('name'=>'今川義元', 'birth'=>1519, 'death'=>1560, 'comment'=>'戦国大名。駿河・遠江・三河を治め、京都上洛を狙うが、桶狭間の戦いで織田信長の奇襲を受け、敗死した。'),
42: array('name'=>'武田信玄', 'birth'=>1521, 'death'=>1573, 'comment'=>'武将。父、信虎を追放して家督を継ぎ、信濃に進出。越後の上杉謙信と川中島で激戦を展開する。三方ヶ原の戦いで徳川家康を破るも、翌年、病没する。'),
43: array('name'=>'千利休', 'birth'=>1522, 'death'=>1591, 'comment'=>'茶人。千家流茶道の開祖。織田信長や豊臣秀吉に仕え、政治にも参画したが、秀吉の怒りを買い自刃。'),
44: array('name'=>'明智光秀', 'birth'=>1528, 'death'=>1582, 'comment'=>'武将。織田信長に重用されたが、本能寺で信長を襲い自害させた。山崎の戦いで秀吉に敗れ、土民に殺された。'),
45: array('name'=>'上杉謙信', 'birth'=>1530, 'death'=>1578, 'comment'=>'武将。越後守護代・長尾為景の子。武田信玄と川中島において激戦を展開する。'),
46: array('name'=>'織田信長', 'birth'=>1534, 'death'=>1582, 'comment'=>'武将。今川義元を桶狭間の戦いで破り、天下布武を実行する。将軍・足利義昭を追放し室町幕府を滅亡させ、安土城を築いて全国統一に乗り出す。明智光秀の急襲により、本能寺で自刃。'),
47: array('name'=>'豊臣秀吉', 'birth'=>1536, 'death'=>1598, 'comment'=>'武将。織田信長に仕え、頭角をあらわす。本能寺の変の後、明智光秀を討ち、1590年に天下を統一。関白、太政大臣となる。朝鮮に出兵するも戦果があがらないまま、伏見城で病没。'),
48: array('name'=>'徳川家康', 'birth'=>1542, 'death'=>1616, 'comment'=>'江戸幕府初代将軍(1603~1605)。三河岡崎城主・松平広忠の長男。今川義元の人質から解放され、織田信長、豊臣秀吉に協力。秀吉の死後、関ヶ原の戦いで勝利し、1603年、征夷大将軍となる。'),
49: array('name'=>'武田勝頼', 'birth'=>1546, 'death'=>1582, 'comment'=>'武将。信玄の子。長篠の戦いで織田・徳川軍に破れ、自刃。武田氏は滅亡する。'),
50: array('name'=>'石田三成', 'birth'=>1560, 'death'=>1600, 'comment'=>'武将。豊臣秀吉に重用されるも、関ヶ原の戦いに敗れ、斬首された。'),
51: array('name'=>'豊臣秀頼', 'birth'=>1593, 'death'=>1615, 'comment'=>'豊臣秀吉の子。徳川秀忠の娘千姫と結婚して右大臣となるも、大坂の陣で徳川氏に敗れ、大坂城で自刃。')
52: );
解説:serialize
156: //シリアライズ
157: $str1 = serialize($arrs);
158: // $filename1 = 'hoge.txt';
159: // file_put_contents($filename1, $str1); //ファイル出力
160: // $arrs = unserialize(file_get_contents($filename1)); //読み込み
serialize は、引数として任意の形式の変数を与えると、それを文字列形式で返してくる。配列の構造を意識する必要はない。返された文字列をファイルに保存すれば良い。
この形式はPHP固有のものであり、他の処理系ではそのまま扱うことはできない。
また、ファイルに保存されたテキストを、組み込み関数 unserialize を通してやれば、元の変数に戻すことができる。
ファイル保存と読み込み処理は、コメントアウトしてある通りである。
解説:JSON形式
162: //JSON形式
163: $str2 = json_encode($arrs);
164: // $filename2 = 'hoge.json';
165: // file_put_contents($filename2, $str2); //ファイル出力
166: // $arrs = json_decode(file_get_contents($filename2)); //読み込み
JSON形式(JavaScript Object Notation)とは、JavaScriptでオブジェクトの値を表現するために制定された方式である。その名の通り、JavaScriptで扱うことができるほか、さまざまな処理系で扱うことができる。
json_encode は、引数として任意の形式の変数を与えると、それをJSON形式の文字列で返してくる。配列の構造を意識する必要はない。返された文字列をファイルに保存すれば良い。
また、ファイルに保存されたテキストを、組み込み関数 json_decode を通してやれば、元の変数に戻すことができる。
ファイル保存と読み込み処理は、コメントアウトしてある通りである。
なお、JSON関数はPHP5以上でないと使えない。
解説:XML形式
168: //XML形式
169: $xmlstr = "<?xml version=\"1.0\" ?><root></root>";
170: $xml = new SimpleXMLElement($xmlstr);
171: foreach ($arrs as $arr) {
172: $xmlitem = $xml->addChild('item');
173: foreach ($arr as $key=>$value){
174: $xmlitem->addChild($key, $value);
175: }
176: }
177: //XML整形:DOMDocument利用
178: $dom = new DOMDocument('1.0', INTERNAL_ENCODING);
179: $node = $dom->importNode(dom_import_simplexml($xml), TRUE);
180: $dom->appendChild($node);
181: $dom->preserveWhiteSpace = FALSE; //余分な空白を除去
182: $dom->formatOutput = TRUE; //整形出力
183: $str3 = $dom->saveXML();
184: // $filename3 = 'hoge.xml';
185: // $dom->save($filename3); //ファイル出力
186: // $xml = simplexml_load_file($filename3); //読み込み
187: // $arrs = get_object_vars($xml);
XML形式(ExtensibleMarkupLanguage)とは、1998年(平成10年)にW3Cにより勧告された言語であるが、さまざまな形式のデータを扱うことができる形式として、インターネットを中心に広く普及している。JavaやMicrosoft系開発言語でも扱うことができる。
ここでは、ノード item の下に配列をぶら下げる構造とした。
まず、SimpleXMLElement オブジェクトを生成し、addChild を使って、配列の値を子要素として追加していく。
次に、XMLオブジェクトを文字列に変換する手順だが、asXML を使えば簡単に実現できるのだが、空白や改行がないなど読みにくい。
そこで、XMLオブジェクトを DOMDocument クラスに渡し、DOMDocumentのメソッドを使って整形することにした。
saveXML で返された文字列をファイルに保存すれば良い。
また、ファイルに保存されたテキストを、組み込み関数 simplexml_load_file を通してやれば、XMLオブジェクトとして取り出すことができる。さらに get_object_vars を通してやれば、元の変数に戻すことができる。
ファイル保存と読み込み処理は、コメントアウトしてある通りである。
なお、SimpleXMLはPHP5以上でないと使えない。
また、この部分の処理は2次元配列に限定している。任意の構造の配列に適用するには、再帰呼び出しを行うなど工夫が必要である。
参考サイト
- serialize :PHP公式
- JSON関数:PHP公式
- SimpleXML:PHP公式
- 「PHP中級テクニック」参考書籍の紹介:ぱふぅ家のホームページ
- PHPでarrayの内容を文字列で取得する:Symfoware
(2021年5月12日)PHP8対応,リファラ・チェック追加