経路列挙モデルのデータを配列化する
PHPのarray_mergeの仕様により苦しめられたり
そもそもそのロジックに行き当たるまでに1時間は頭を悩ませていたという経緯から
ちゃんとログに残そうかと。
経路列挙モデルというのはDBの話で
親子関係をPath形式で所持する方法。(だと思ってるw
経路列挙モデル(検索編):MySQLで階層化データを使う | MAKIZOU.COM
ここら辺がわかりやすい感じ。
これを、PHPで扱う時
どうやって再帰的に処理を行うかで頭をすごく悩ませた本日の午前中。
なんとか形になったので、忘れないうちにログに残します。
function pathToArray(){ $path = ".1.2.5."; $rows = array( array("id" => 1 , "path" => ".1.","name"=>"name1"), array("id" => 2 , "path" => ".1.2.","name"=>"name2"), array("id" => 5 , "path" => ".1.2.5.","name"=>"name5"), array("id" => 6 , "path" => ".1.6.","name"=>"name6"), ); $result = array(); foreach($rows as $row){ $path = $row["path"]; $temp = explode(".",$path); $temp = array_filter($temp); $prev["row"] = $row;//配列最初のキー取得 foreach(array_reverse ($temp) as $tempS){ $res["$tempS"] = $prev; $prev = array(); $prev["ID$tempS"] =$res["$tempS"];//array_mergeの仕様で数値型になると再振り分けしちゃうので文字列型に無理矢理w } if(count($result) != 0){ $result = array_merge_recursive($result,$prev); }else{ $result = $prev; } $prev = array(); } var_dump($result); }
これを実行すると
array (size=1) 'ID1' => array (size=3) 'row' => array (size=3) 'id' => int 1 'path' => string '.1.' (length=3) 'name' => string 'name1' (length=5) 'ID2' => array (size=2) 'row' => array (size=3) 'id' => int 2 'path' => string '.1.2.' (length=5) 'name' => string 'name2' (length=5) 'ID5' => array (size=1) 'row' => array (size=3) 'id' => int 5 'path' => string '.1.2.5.' (length=7) 'name' => string 'name5' (length=5) 'ID6' => array (size=1) 'row' => array (size=3) 'id' => int 6 'path' => string '.1.6.' (length=5) 'name' => string 'name6' (length=5)
こうなるので、rowがあったら処理をして
なければ処理しない的な再帰的なものを作ってあげれば
Pathの順序にいろいろとできるよっていう。
いやー頭を痛ませました。
(はてぶろのソース記法についても一瞬悩まされましたよ。。。orz
変数名がアレなのはつっこまないでください。。。
MacのMailで 差出人、宛先の名称が変な場合の対処法
Macを使っているんですが(会社のみ。家にもほしい気もしないこともないんだが。。。)
基本のメールソフトである Mail で 社用メールが設定してあったので
それを使っているんですがあまり不便な事はないんですが。
宛先が変なんです!
株式会社 テスト の 山田花子さん という人がいたとした時
なぜか
山田 テスト 花子 っていう名称になっていたりして
そのままの名称で相手方に届いてしまうらしいんです。
(確認したことないんですけど)
どうしてそういう現象がおきるのかはよくわかりませんが、
対処法をメモ。
Mail.appの ウインドウメニュー>宛先の履歴ー>対象者の情報を削除
本当はアドレスブックに該当の人の詳細な情報入力しておいたほうがよいそうなんですが。。。
営業職でもなく、社内メールしかしないので、
私はこれで満足!
詳細はこちらのページ参照で。。。。
【git】stashを間違えたブランチにpopしてコンフリクトが起きた時にすること
結論
stashでコンフリクトが発生した場合には
stashには残ってる!
git reset --hard
でコミットの段階に戻って
git checkout branch
で本当のブランチに移動。
git stash pop
で元に戻る!
-------------以降どうでもいい経緯-------------
git使い始めて気がつけば1年たっているにも関わらず
あまり進歩していない私ですが、、、
先日、寝ぼけて?会社でこんなことやっちまいやした。
masterの内容を取り込まなくてはいけないので
・A'ブランチからmasterへ移動
(作業中だったため、A'ブランチでstash実行)
・pullしたけどネットワーク不調なのかエラーが。。。
(会社の人に聞いているけど解決方法わかったのかな?)
・しょうがないので元のブランチに戻って作業しようとcheckout A'を実施
・コマンド失敗していたらしく、A'ブランチじゃなくてそれの先祖でとっといてあるAブランチに移動(←そして気づいていない自分)
・作業続行しようとgit stash pop を実行
→コンフリクト発生
慌てふためく私。
・とりあえずstashしてコンフリクトが発生した時の事例を調べるためgoogle先生を頼る
ここを発見する。
現在のコミットを採用する場合には
git checkout --ours .
と書いてあるので実行
なぜか出来ず!!!!!!
しょうがないのでtwitterで相談。
家で家族に相談。
・変な事してなければgit stash list に残ってるよ!
と。
だから
git reset --hard (コミットしてある状態まで戻る)
↓
git checkout A'
で元に戻るよ!
って!
先週金曜日にそれやったので
今朝というかさっき出社して直しましたとさ。
あー、なおってよかった。