MW211 EXIT

devlog
PHP/JSON整形
2018年08月01日
【JSON→PHP配列】
┌──────────────────────────────────────┐
│$PHP配列 = json_decode($JSON, TRUE);                                        │
└──────────────────────────────────────┘

【PHP配列→JSON】
┌──────────────────────────────────────┐
│$JSON = json_encode($PHP配列);                                              │
└──────────────────────────────────────┘

【PHP配列→JSON】(わかりやすいように表示)
┌──────────────────────────────────────┐
│$JSON = json_encode($PHP配列, JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT);    │
└──────────────────────────────────────┘
  (JSON_UNESCAPED_UNICODE=日本語そのまま、JSON_PRETTY_PRINT=整列)

従って、以下のようにすると、JSONをきれいに整形できる。
┌──────────────────────────────────────┐
│$PHP配列 = json_decode($JSON, TRUE);                                        │
│echo json_encode($PHP配列, JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT);       │
└──────────────────────────────────────┘
分類:PHP
PHP/CSVを七列ごとに改行(続き)
2018年06月07日
一列のCSVデータを七件ずつ改行するには?
┌───┬──────────────────────────────────┐
│置換前│1,2,3,4,5,6,7,8,9,10,11,12,13,14,15                                 │
├───┼──────────────────────────────────┤
│置換後│1,2,3,4,5,6,7                                                       │
│      │8,9,10,11,12,13,14                                                  │
│      │15                                                                  │
└───┴──────────────────────────────────┘

PHPでやってみたよ。
┌──────────────────────────────────────┐
│$csv = '1,2,3,4,5,6,7,8,9,10,11,12,13,14,15';                               │
│$offset = -1; $count = 0;                                                   │
│while (($offset = strpos($csv, ',', ++$offset)) !== FALSE && ++$count) {    │
│    if ($count % 7 === 0) {                                                 │
│        $csv = substr_replace($csv, "\r\n", $offset, 1);                    │
│    }                                                                       │
│}                                                                           │
│echo $csv;                                                                  │
└──────────────────────────────────────┘

テクニックに走った感じ(自分でも後でわからなくなりそう)なので、
ちょっとわかりやすくしてみた。
┌──────────────────────────────────────┐
│$csv = '1,2,3,4,5,6,7,8,9,10,11,12,13,14,15';                               │
│$count = 1;                                                                 │
│$offset = 0;                                                                │
│while (($offset = strpos($csv, ',', $offset)) !== FALSE) {                  │
│    if ($count % 7 === 0) {                                                 │
│        $csv = substr_replace($csv, "\r\n", $offset, 1);                    │
│    }                                                                       │
│    $count++;                                                               │
│    $offset++;                                                              │
│}                                                                           │
│echo $csv;                                                                  │
└──────────────────────────────────────┘
分類:PHP
PHP/CSVを七列ごとに改行
2018年06月06日
一列のCSVデータを七件ずつ改行するには?
┌───┬──────────────────────────────────┐
│置換前│1,2,3,4,5,6,7,8,9,10,11,12,13,14,15                                 │
├───┼──────────────────────────────────┤
│置換後│1,2,3,4,5,6,7                                                       │
│      │8,9,10,11,12,13,14                                                  │
│      │15                                                                  │
└───┴──────────────────────────────────┘

正規表現なら以下のような感じ。
┌───┬──────────────────────────────────┐
│置換前│(?<=([^,]*,){6}[^,]*),                                              │
├───┼──────────────────────────────────┤
│置換後│\t                                                                  │
└───┴──────────────────────────────────┘
でも、秀丸エディタではできたけど、PHP(preg)だとダメだった。
直前条件「(?<=)」が可変だと受け付けてくれないようだ。
他に方法を考えねば。
分類:PHP
PHP/カンマ連結
2017年12月02日
「echo 'a' . 'b';」(ドット連結)と「echo 'a' , 'b';」(カンマ連結)の違い。

イメージ的に、「echo 'a' . 'b';」は
┌──────────────────────────────────────┐
│$dummy = 'a' . 'b';                                                         │
│echo $dummy;                                                                │
└──────────────────────────────────────┘
なのに対して、「echo 'a' , 'b';」は
┌──────────────────────────────────────┐
│echo 'a';                                                                   │
│echo 'b';                                                                   │
└──────────────────────────────────────┘
といった感じ。

よって、「$dummy = 'a' , 'b';」とかはできなのだけれども、
カンマ連結の方が途中にバッファを持たない分、速くて小さくまとめられる。

よって、どちらかというとカンマ連結が推奨される。
分類:PHP
PHP/session_save_path()
2017年06月12日
┌──────────────────────────────────────┐
│session.save_path = "C:\Windows\Temp"                                       │
└──────────────────────────────────────┘
例えば上記のように、「php.ini」で「session.save_path」を設定すれば、
以下のように「session_save_path()」でその値を取得することができる。
┌──────────────────────────────────────┐
│echo session_save_path();                              →「C:\Windows\Temp」│
└──────────────────────────────────────┘

しかし、以下のように設定しない場合(行自体がない場合も含む)には、
「(no value)」扱いとなってしまう。
┌──────────────────────────────────────┐
│session.save_path =                                                         │
└──────────────────────────────────────┘
よって、「session_save_path()」では値を取得できない。
┌──────────────────────────────────────┐
│echo session_save_path();                                             →「」│
└──────────────────────────────────────┘
但し、既定のパスにセッションは記録されるようだ。

既定のパスは「sys_get_temp_dir()」で取得できるようなので
以下のようにしてあげれば補填できそうだ。
┌──────────────────────────────────────┐
│echo (session_save_path()) ? session_save_path() : sys_get_temp_dir();      │
└──────────────────────────────────────┘
分類:PHP
PHP/文字列をXML化して出力する方法
2017年05月21日
普通に出力する場合。
┌──────────────────────────────────────┐
│$xml = new SimpleXMLElement('<xml></xml>');                                 │
│echo $xml->asXML();                                                         │
└──────────────────────────────────────┘

テキストエリアに出力する場合。
┌──────────────────────────────────────┐
│$xml = new SimpleXMLElement('<xml></xml>');                                 │
│echo '<textarea>' . $xml->asXML() . '<textarea>';                           │
└──────────────────────────────────────┘

サニタイズして出力する場合。
┌──────────────────────────────────────┐
│$xml = new SimpleXMLElement('<xml></xml>');                                 │
│echo '<pre>' . htmlspecialchars($xml->asXML()) . '</pre>';                  │
└──────────────────────────────────────┘

XMLとして出力する場合。
┌──────────────────────────────────────┐
│$xml = new SimpleXMLElement('<xml></xml>');                                 │
│header('Content-type:application/xml; charset=UTF-8');                      │
│echo $xml->asXML();                                                         │
└──────────────────────────────────────┘

完全にXML化する場合。
┌──────────────────────────────────────┐
│$xml = new SimpleXMLElement('<xml></xml>');                                 │
│$dom = new DOMDocument('1.0', 'UTF-8');                                     │
│$dom->formatOutput = TRUE;                                                  │
│$dom->loadXML($xml->asXML());                                               │
│echo $dom->saveXML();                                                       │
└──────────────────────────────────────┘
分類:PHP、XML
PHP/SimpleXMLでXMLファイル出力
2017年05月13日
┌──────────────────────────────────────┐
│header('Content-type:application/xml; charset=UTF-8');                      │
│echo $xml->asXML(ファイル名);                                               │
└──────────────────────────────────────┘
ファイル名(のパス)はWindows環境の場合、シフトJISで指定する必要あり。
分類:PHP
PHP/SimpleXML(2)((1)はないけど)
2017年05月12日
┌──────────────────────────────────────┐
│$xmldecl = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>';       │
│$xmldata = <<<___XML___                                                     │
│<xml>                                                                       │
│  <data1>                                                                   │
│    <data2 id="abc">ABC</data2>                                             │
│  </data1>                                                                  │
│</xml>                                                                      │
│                                                                            │
│___XML___;                                                                  │
│$xml = new SimpleXMLElement($xmldecl . $xmldata);                           │
└──────────────────────────────────────┘
属性を取得する方法。
┌──────────────────────────────────────┐
│echo $xml->data1[0]->data2->attributes()['id'];                  //→「abc」│
└──────────────────────────────────────┘
分類:PHP
PHP/SimpleXMLでXML文字列を操作
2017年05月01日
まず、以下のような感じで文字列を作成し、
SimpleXMLElementクラスのコンストラクタに代入する。
┌──────────────────────────────────────┐
│$xmldecl = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>';       │
│$xmldata = <<<___XML___                                                     │
│<xml>                                                                       │
│  <data1>                                                                   │
│    <data2>ABC</data2>                                                      │
│  </data1>                                                                  │
│</xml>                                                                      │
│                                                                            │
│___XML___;                                                                  │
│$xml = new SimpleXMLElement($xmldecl . $xmldata);                           │
└──────────────────────────────────────┘
すると、インスタンス「$xml」にXML形式のデータが格納されるので
タグ名を用いたプロパティ名を駆使して、操作する。

まずは、個別に項目の値を参照する方法。
┌──────────────────────────────────────┐
│echo $xml->data1[0]->data2;                                      //→「ABC」│
└──────────────────────────────────────┘
プロパティを参照するだけ。

全ての内容をXML形式でWeb画面に表示する方法。
┌──────────────────────────────────────┐
│echo '<pre>';                                                               │
│echo htmlspecialchars($xml->asXML());                                       │
│echo '</pre>';                                                              │
└──────────────────────────────────────┘
「asXML()」メソッドで全出力。
これに加えて「htmlspecialchars()」でエスケープし「<pre>」タグで囲う。

XML形式として割り切って使用する(他と連動させたりしない)場合には
「header()」と組み合わせて、以下も可。
┌──────────────────────────────────────┐
│header('Content-type:application/xml; charset=UTF-8');                      │
│echo $xml->asXML();                                                         │
└──────────────────────────────────────┘

項目内容を書き替えるには、プロパティに値を代入すればよい。
┌──────────────────────────────────────┐
│$xml->data1[0]->data2 = 'XYZ';                                              │
│echo $xml->data1[0]->data2;                                      //→「XYZ」│
└──────────────────────────────────────┘
分類:PHP
PHP/再帰的なmkdir
2017年01月31日
Linux上のPHPにおいての話。

mkdir()の第三引数にTRUEを指定すると
「mkdir -p」コマンド相当のmkdir()を実行できる。
つまり、「mkdir(第一階層/第二階層)」と指定した場合、
第一階層がないとエラーとなるが、
「mkdir(第一階層/第二階層,,TRUE)」と指定すれば、
(第二階層に加え)第一階層もmkdir()してくれる。
分類:PHP
前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 … 18 次へ