トップページ⇒php
1001コメント327KB

【PHP】下らねぇ質問はID出して書き込みやがれ 78

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2008/12/23(火) 19:08:55ID:???
質問者はまず>>1を良く読むこと(必須!)
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。

◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 76
http://pc11.2ch.net/test/read.cgi/php/1226517332/

◆質問用テンプレ
【OS名】vine linux
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql
【質問内容】

◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)

◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
 (荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)

◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
0067nobodyさん2008/12/24(水) 14:12:57ID:???
>>66
まさかとは思うが開発をPHP5でやって本番はPHP4とかないよな?
あと変数の初期化はコンストラクタで行っているんであって
宣言時にarray値をぶちこんでたりしないよな?
0068nobodyさん2008/12/24(水) 14:19:03ID:???
arrayでもいけるでしょ
0069nobodyさん2008/12/24(水) 14:23:45ID:oUm0Exnm
fopen/fwriteで個々のデータをtxtに蓄積し参照してるんですが、データ数が膨大になるとどうなるんですか?
例えばtxtファイルが100MBくらいになるとか。
また既存のシステム(txt)からmysqlにアップグレード可能ですか?
0070nobodyさん2008/12/24(水) 14:26:48ID:???
ようし、エスパーしちゃうぞ!

この場合、41行目じゃなくて、
それより前に(の後のクォートが閉じられていないんだと思うよ。
(もしくは、そのクォートが文字コードの問題でエスケープでこけてるとか。)

だから、41行目の開始クォートで逆にクォートが閉じ、
そこに期待される閉じ括弧がなくて文字列があるぞってエラー
だから、41行目をコメントアウトすると、正しいはずの別の宣言文で
同じロジックでエラーが移動していく。

59氏は恥ずかしがらずにソース貼ってみて。
0071nobodyさん2008/12/24(水) 14:28:07ID:???
>>69
とりあえず、やってみたら?
プロセスに十分なメモリが当たってれば大丈夫でしょう。

テキストから、MySQLにインポートとか、普通にできる。
0072nobodyさん2008/12/24(水) 14:30:38ID:oUm0Exnm
>>71

ありがとうございます
mysqlは『基礎からのMysql』の95ページを読み終えたレベルですが、がんばってやってみます。
0073nobodyさん2008/12/24(水) 14:34:12ID:???
>>69
100Mになる前にメモリーのリミットが限界値を越えて
テキストから全データを呼びだして配列にしたりすることが
出来なくなる
もしくはリミットが200Mとかになっているなら開くまでに
かなりの時間がかかりどうさが遅くなりタイムアウトに
ひっかかって落ちる
0074nobodyさん2008/12/24(水) 14:37:01ID:???
>>73
メモリーリミットってそこ?
fopenするだけなら、ファイルハンドルを取得するだけだから、
file()しないでfread()なら大丈夫じゃない?
0075582008/12/24(水) 14:52:51ID:AHayykgc
>>62
config.logがどこにあるかわからん初心者です
./configureだけで通しても、同様にだめでした
0076nobodyさん2008/12/24(水) 14:54:58ID:???
>>75
config.logが読めないんなら、おとなしく、yumで入れるとかしたら?
リポジトリを[centosplus]にすればPHP5だよ。
0077nobodyさん2008/12/24(水) 15:01:17ID:???
>>76
全部引出すの前提とエスパーした
0078582008/12/24(水) 15:02:54ID:AHayykgc
>>76
実験鯖でいじくりまわす練習してるので、yumだと意味がないです
参考サイトでも教えてくだされ
0079nobodyさん2008/12/24(水) 15:03:49ID:???
練習してるなら自分で調べろよw
0080nobodyさん2008/12/24(水) 15:11:53ID:???
>>78
とりあえず、config.logを探してみたら?
unixコマンドの知識0でソースからコンパイルしても何の意味もないでしょ。
まぁ、普通に./Configureした作業ディレクトリ内にあると思うけど。。
0081nobodyさん2008/12/24(水) 15:15:10ID:???
一体>>58の目標はなんだ?
鯖管にでもなりたいのか?
ならスレ違いだ
phpをやりたいのか?
なら慣れてるwindowsでとっとと環境整えて始めろ
0082nobodyさん2008/12/24(水) 15:33:03ID:???
こんなことすら自己解決できないようじゃな・・
0083nobodyさん2008/12/24(水) 15:40:57ID:Gn6DSPVu
ちょっと変な例なのですが、

$arr = array('a', 'b', 'c');
という変数から
$data['a']['b']['c']
にアクセスするような関数を作りたいと思っています。
何か良い方法はありますか?
0084nobodyさん2008/12/24(水) 15:46:29ID:???
>>83
ボクもこういう関数が必要だと思ってました
0085nobodyさん2008/12/24(水) 15:46:30ID:???
要素数は可変なんだろ?
0086nobodyさん2008/12/24(水) 15:51:00ID:???
>>83
引数をループしてアクセスすれば?
配列の要素数が決まってるなら、0 1 2でもいいと思うけど。

まぁ、遊びとしては
eval('$res = $data[\'' . implode("']['", $arr) . '\'];');
0087832008/12/24(水) 16:04:06ID:Gn6DSPVu
後出しで申し訳ありません。要素は可変です。
出来るだけ綺麗に仕上げたいのでevalは避けたいのです。

call_user_funcあたりの変数呼び出し版みたいなのがあると一番良いんですが。.
0088nobodyさん2008/12/24(水) 16:06:45ID:???
foreachなり再帰なりでできるじゃん
どれだけ綺麗さを求めてるのか知らんけど
0089582008/12/24(水) 16:24:42ID:AHayykgc
>>80

-lresolv -lm -ldl -lnsl -lxml2 -lz -lm 1>&5
/usr/bin/ld: skipping incompatible /usr/lib/libz.so when searching for -lz
/usr/bin/ld: skipping incompatible /usr/lib/libz.a when searching for -lz
/usr/bin/ld: cannot find -lz
collect2: ld returned 1 exit status
configure: failed program was:
#line 20123 "configure"
#include "confdefs.h"


char xmlInitParser();
int main() {
xmlInitParser();
return 0;
}

ここまでです
0090nobodyさん2008/12/24(水) 16:25:39ID:???
$sql = mysql_query("select * from test");
while($res = mysql_fetch_array( $sql )){
print "<a href='".$res["url"]."'>".$res["name"]."</a><br>";
$month = date("n月j日", $res["time"]);
print $month."<br>";
}

これでカラム名time(date型)に入ってる(2009-1-1)のようなデータを
1月1日というように表示させたいです。
上の文だと一番上のレコードの日時はきちんと表示されるんですが
以降ずっと最初の日時のみ表示されてしまいます。

なぜですか?
0091nobodyさん2008/12/24(水) 16:28:05ID:???
>>いち
0092902008/12/24(水) 16:34:44ID:???
【OS名】Windows XP
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql
【質問内容】
>>90
補足ですが
$month = date("Y:n月j日", $res["time"]);
としたら1970:1月1日 と表示されたので根本的に間違ってました。

もう一度まとめますが
カラム名time(date型)に入ってる(2009-1-1)のようなデータを
1月1日というように表示させるにはどうすればよいでしょうか?
0093nobodyさん2008/12/24(水) 16:37:32ID:???
>>89
スレチだな。
しかし、一応ヒントだけldの設定をちゃんとすればOKだと思うけど、
yum install zlib-devel
してみそ。
あとは、祈れ
0094nobodyさん2008/12/24(水) 16:38:01ID:???
>>いち
0095nobodyさん2008/12/24(水) 16:38:51ID:9cQH1zL0
>>59ですが、自己解決しました。
mbstring.script_encodingが意図しないものになり、たまにエラーになったようです。
'--enable-zend-multibyte' を消して再コンパイルしたら発生しないようになりました。
0096902008/12/24(水) 16:40:23ID:GAo/2aEb
>>94
すみません。
全然ちゃんと読んでませんでした。
0097582008/12/24(水) 16:43:00ID:AHayykgc
>>93
無事成功しました、ありがとう
0098nobodyさん2008/12/24(水) 16:44:11ID:???
>>96
date関数の第二引数はunixタイムスタンプです。日付を渡しても無理。
strtotimeかませばOK。
$month = date("Y:n月j日", strtotime($res["time"]));
0099nobodyさん2008/12/24(水) 16:44:12ID:???
>>96
sscanf
とかは?
0100902008/12/24(水) 16:47:48ID:GAo/2aEb
>>98
ありがとうございます。
きちんと表示されました。
0101nobodyさん2008/12/24(水) 17:37:15ID:???
$month = date("Y:n月j日", strtotime($res["飯島愛死亡"]));
0102前スレ7452008/12/24(水) 18:07:23ID:???
前スレの >>747
やってみました.基本的に $this-> 付けないとダメだと理解しました
C++ のときは何もつけなくてもよかったのでややこしいです


$hoge = "global::hoge";
// 次の関数定義を削除すると A::func() の最後の行で Fatal error: Call to undefined function piyo()
function piyo() {
echo "global::piyo()\n";
}

class A
{
private $hoge = "A::hoge";
private function piyo() {
echo "A::piyo()\n";
}
0103前スレ7452008/12/24(水) 18:08:45ID:???
(つづき)
public function func() {
var_dump($this->hoge);
var_dump($hoge);

// これは予期した通りに動作する
$this->hoge = 'with $this->';
var_dump($this->hoge);
var_dump($hoge);

// この $hoge は関数 func() のスタックに積まれた変数を参照?
$hoge = 'without $this->';
var_dump($this->hoge);
var_dump($hoge);

// A::piyo() を呼ぶ
$this->piyo();
// グローバルな piyo() を呼ぶ
piyo();
}
}

$a = new A();
$a->func();
0104前スレ7452008/12/24(水) 18:09:27ID:???
連投スマソ

出力結果:
string(7) "A::hoge"
NULL
string(12) "with $this->"
NULL
string(12) "with $this->"
string(15) "without $this->"
A::piyo()
global::piyo()
0105nobodyさん2008/12/24(水) 18:24:58ID:???
>>102-104
報告乙です。マニュアルも見たらいいよ

ちなみに、PHPはオブジェクト指向言語ではないので、過剰な期待はしないように
http://jp2.php.net/manual/ja/language.oop5.php

javaでもperlでもc++でもないんですよ、PHPは
0106nobodyさん2008/12/24(水) 19:06:28ID:???
C++しかやってないんだろうな
0107nobodyさん2008/12/24(水) 19:56:58ID:???
ガッコでかじっただけだろw
0108nobodyさん2008/12/25(木) 03:10:56ID:aKyYzPmf
private protected
どちらを使うべき?
0109nobodyさん2008/12/25(木) 03:15:10ID:???
用途に応じて
0110nobodyさん2008/12/25(木) 03:28:44ID:aKyYzPmf
普通はpublicにはしないの?
0111nobodyさん2008/12/25(木) 03:29:37ID:aKyYzPmf
「protectedなら当クラ スおよ びそれを継承する派生クラスのみ調べればOKです。」

って書いてあるけど、もし派生クラスが30もあったら
調べるの大変だよね?
0112nobodyさん2008/12/25(木) 03:31:18ID:???
「質問」の人?
0113nobodyさん2008/12/25(木) 03:37:29ID:aKyYzPmf
var と publicってまったく「同じ」なの?
0114nobodyさん2008/12/25(木) 03:38:06ID:???
キモヲタってなんであんなにキモイんだろうね。
0115nobodyさん2008/12/25(木) 03:43:27ID:???
安全のために全部privateにしようかと思ったけど、
それだと継承する意味ないよね。

子クラスから親クラスのメソッド一切使えないなんて。

だから、半分private、半分protectedにするのが最適解?
0116nobodyさん2008/12/25(木) 03:47:27ID:???
>>112
お前の巣

クリスマスに女性声優が男と過ごしていないか監視するスレ
http://tsushima.2ch.net/test/read.cgi/news/1230135292/
0117nobodyさん2008/12/25(木) 04:00:19ID:???
>>115
ID出せ
0118nobodyさん2008/12/25(木) 04:12:38ID:???
>>115
黄金比で分けるのがベスト。
0119nobodyさん2008/12/25(木) 04:18:20ID:???
>>115
釣りにしても質問にしても薄っぺら過ぎる・・
0120nobodyさん2008/12/25(木) 04:26:20ID:???
実際の話、全部privateだと
子クラスから親クラスのメソッド使用不可になる?
0121nobodyさん2008/12/25(木) 04:27:15ID:???
流れワロス
0122nobodyさん2008/12/25(木) 04:57:35ID:???
>>108
一人OOPで何悩んでるだよw
外から使うメソッド=publicで、その他privateだろうが
protectedなんざ何に使うの?
え?継承?www
またまたご冗談を
一人で開発しててポリモるなんて無理やりだろ
てんで必要のないとこでポリモるってかw
そんなことしても後からメンテするときにこっぱ恥ずかしくなるだけだからやめとけって
どうしても使いたいなら俺ライブラリを一般化して公開することだなw
0123nobodyさん2008/12/25(木) 04:58:56ID:???
今は一人でも手伝ってくれるっていってくれる人がいるんだよ
そいつが合流したらすぐに2人になるだろ
0124nobodyさん2008/12/25(木) 05:20:43ID:???
JAVA→高額案件多い→みんなやりたがる→優秀な人だけ残る

PHP→低額案件多い→だれもやりたがらない→ダメな人だけ残る→php板に隔離される
0125nobodyさん2008/12/25(木) 05:38:20ID:???
php板?
0126nobodyさん2008/12/25(木) 05:59:21ID:???
「プログラマ暦1年ですPHPだけです」

というような方々は 「くらす ってなに? おぶ
じぇくとってなに?いんすたんすってなに?」
というような方々を多いように見受けられま
すね。

業務としてシステム構築する際に人がいない
からといって、PHPのみの経験者を開発メン
バーに入れると SEさんが痛めみます・・・・orz

そういう方々がセキュリティ的な意識も低いせ
いか、PHPはセキュリティに甘い という風潮が
あるようです
0127nobodyさん2008/12/25(木) 06:04:37ID:???
「クラスと同じ名前だったら、コンストラクタ」
ってPHP4から仕方なく引き継いだグダグダ仕様らしいな
0128nobodyさん2008/12/25(木) 06:36:01ID:???
一人でまったく無駄なところでポリモってます、ごめんちゃい。
0129nobodyさん2008/12/25(木) 06:45:46ID:???
>>111
javadocを一度見てみな
0130nobodyさん2008/12/25(木) 08:21:19ID:???
>127
JavaもC++も、クラス名と同名のメソッドはコンストラクタと見なされる。そう珍しい仕様でもない。
「マジックメソッド(笑)」のような予約された名前を使わないなら、「特別な関数」を関数名だけで表す唯一の方法だからな。

>111
派生クラスを読むときに、親クラスを読む手間がかかるだけ。
派生クラスを読むときに兄弟にあたるクラスを読む必要はないし、親クラスを読む時は親だけ読めばいい。
0131nobodyさん2008/12/25(木) 08:35:14ID:???
>>111
解説サイトやらブログやら覘いて質問立てるんなら、引用元書いてくれ
ブログ記事を誤解して質問されてもなぁ

あぁ、でも糞サイト晒すならブログ板かw
0132nobodyさん2008/12/25(木) 08:35:46ID:???
http://www.edita.jp/tkagawa2/one/tkagawa227419.html

このページに

「オブジェクト指向の世界では変数を参照するのに、
「アクセッサ」と言う関数を通して参照すると言う変な習慣が有ります。
これは値の設定の時にチェックしたり、
値の返却の時に編集したりするのが楽になるためと言われていますが、
多分、ステップ換算の案件の時に、より多くふんだくれるからだと思います。」

って書いてあるが本当?
0133nobodyさん2008/12/25(木) 08:37:48ID:???
>>131
ググれば一発で出てくる
0134nobodyさん2008/12/25(木) 08:44:08ID:???
>>133
あほか
0135nobodyさん2008/12/25(木) 08:45:10ID:???
>>132
ID出てないよ
0136nobodyさん2008/12/25(木) 09:06:44ID:aKyYzPmf
<?php
$a="hoge1";
for ($i=1;$i<=10;$i++){
print $a;
print "<br>";
$a++;
}
?>

これ実行したら10番目の結果に吹いた
これを事前に予測できる勇者は
そういないと思う
0137nobodyさん2008/12/25(木) 09:12:17ID:???
$a="bak1";
で始めるといいよ
0138nobodyさん2008/12/25(木) 09:18:00ID:???
>>136
good job!
0139nobodyさん2008/12/25(木) 09:26:30ID:???
>132
class User{
 function getName(){
  return $this->name;
 }
 function getMail(){
  if(false === isset($this->mail)){
   $this->mail = $this->loadMainAddressFromDb(); // 重い処理
  }
  return $this->mail;
 }
 function getUrll(){
  return $this->homepage->getUrl();
 }
}
・遅延初期化を使える(getMail()。必要になるまで変数の中身を取りに行かない、初期化が重い場合に有効)
・内部構造を隠蔽できる(getUrl()。直接変数にアクセスする構造だと、このような内部構造を取れないし、後からこういう風に変更もできない)
・publicでメンバを公開すると、その値に変数を好き勝手に代入できてしまう。getterだけを公開しsetterを作らないと、メンバーの変更を自分とこだけで管理できる
0140nobodyさん2008/12/25(木) 09:39:57ID:???
String型に++とかPHPユーザはキモイことを考えますね
01411392008/12/25(木) 09:45:53ID:???
>132
というか読んで吹いた。ダメだこの記事。
カプセル化はなんとか分かってるがオブジェクト指向が分かってないレベルだな。

O/Rマッパというのは「オブジェクト/リレーショナルDBマッパ」のこと。
例えばUserってテーブルにmailとnameってフィールドがあった場合に、
class User extends ORMapper{}
と宣言するだけで、$user->mailとかにアクセスできるようになるのが正しいO/Rマッパ。
(当然、DBへの値の挿入もメンバー変数代入のように実行できる。永続化のタイミングは実装次第だが)

こいつの書いてる「O/Rマッパ(笑)」は、単なるDB抽象化レイヤー。つまりPDO。
PHPだと、CBL_ActiveRecordがコンパクトな実装で比較的読みやすい。
0142nobodyさん2008/12/25(木) 09:56:11ID:???
ORマッパーの実装はそう悪くないと思うが。
初期化が必要なのがダサいが。
0143nobodyさん2008/12/25(木) 10:03:19ID:???
>>130
>>139
>>141
ひけらかすために、ルールを無視するって、かわいいねぇ
0144nobodyさん2008/12/25(木) 10:10:09ID:mYLTQOpT
【OS名】CentOS 5.2
【PHPのバージョン】PHP 5.2.6
【連携ソフトウェア】mysql
【質問内容】PHPでExcel-XMLを操作できるライブラリ

PHP で Excelファイルを操作、編集できるライブラリはないでしょうか?
JavaならApache POIに相当するようなものです。

Class: Excel XML Parser (excel, xmlparser, xml_parser.php, excel reader) - PHP Classes
http://www.phpclasses.org/browse/package/3187.html

検索して見つけたこれを試してみましたが、Excelのセルのを一つずつ書き換え
ることができるだけでした。
0145nobodyさん2008/12/25(木) 10:20:24ID:???
PHPExcel使ってる
0146nobodyさん2008/12/25(木) 10:25:04ID:RfhezXXN
>>145
日本語対応は可能でしょうか?
注意点などありますか?
0147nobodyさん2008/12/25(木) 10:30:28ID:sOMAc6ie
$test[aaa]と$test['aaa']では、
$test['aaa']の方が速いのは分かるんですが、
$test['aaa']と$test[0]だとどっちが速いですか?
コード上見て分かりやすいって理由だけで連想配列にするなら、
ただの配列にしといた方が良かったりしますか?
01481442008/12/25(木) 10:36:09ID:???
>>145
> PHPExcel使ってる

おお、こんなものが!調べてみます。ありがとうございます。
0149nobodyさん2008/12/25(木) 10:54:42ID:???
>>147
天然?
> $test['aaa']と$test[0]だとどっちが速いですか?

forループして、CLIで実行すればすぐわかると思うよ。
やってみてレポートしたら?

> コード上見て分かりやすいって理由だけで連想配列にするなら、
> ただの配列にしといた方が良かったりしますか?

良いかどうかはどういう観点かによる。
どういう観点での良しあしが知りたいの?
0150nobodyさん2008/12/25(木) 11:22:44ID:sOMAc6ie
>>149
試しに3万個の要素入れて計ってみました
連想配列にしない方が若干速かったです。
質問するようなことじゃなかったですね。すんません。

経緯をいうと、
キーを2種類どちらかのフラグとして持ちたかったので、
以下のように文字列としてもつか数字としてもつか悩んでたんです。

$test[]['default'] = 'hoge';
$test[]['advance'] = 'wwww';

$test[][0] = 'hoge';
$test[][1] = 'wwww';

コード上は文字列にしといた方が何のフラグがすぐ分かるので良いかなぁと、
でも速度に差があるなら数字の方が良いのかなぁと。

若干速いので数字で持つことにします。意味はコメントにいくらでも書けばいいので。
0151nobodyさん2008/12/25(木) 11:42:13ID:???
>>150
計測乙。
3万個も使うのか・・・そこまで速度が必要なケースなんだ・・
設計は人それぞれだからいいんだけどね。
0152nobodyさん2008/12/25(木) 11:47:31ID:???
´(oo)`)y-~~  あんまりデリケートにチューンするなよ レースじゃねえんだからな
0153832008/12/25(木) 14:18:17ID:2wMGCLSI
>>83です。
変数を取得するのはforeachで実現できました。有り難う御座いました。
しかし変数をsetする方法が思いつきません。

クラス内の変数にsetする例を考えています。
$arr = array('a', 'b', 'c');
$data = 'abc';
$cls->setVar($arr, $data);
とするとsetVar()内では

function setVar($arr, $data)
{
 // $arrを下記の通りに展開して$data代入
 // つまり以下のようなことがしたいです
 $this->data['a']['b']['c'] = $data
}

何か良い案がありましたらお願いします。
0154nobodyさん2008/12/25(木) 14:21:11ID:???
>>153
foreach
0155nobodyさん2008/12/25(木) 14:26:01ID:???
>>153
何がやりたいんだか知らんが、構造的に破綻すると思うぞ。それ
そんなにぐだぐだやるんだったら、素直にArrayObjectでも使った方がいいぞ。
0156832008/12/25(木) 14:32:02ID:2wMGCLSI
>>154
具体例お願いします。
ちょっとお手上げです。

>>155
QuickTimeのAtomにObject的にアクセスするって云うことをやっています。
ファイル構造ググって頂ければ何となく分かるかと思います。
0157nobodyさん2008/12/25(木) 15:07:42ID:???
まぁ、foreachじゃないけど、こんな感じ
class test {
public $data = array();
function setVar($arr, $val)
{
do{
$val = array(array_pop($arr) => $val);
}while($arr);
$this->data = array_merge_recursive($this->data, $val);
}
}
0158nobodyさん2008/12/25(木) 15:12:57ID:???
みたけど、
ttp://okayama.cool.ne.jp/dvd2cd/atom/atomformat.html
俺なら、ArrayObjectでメソッドチェーンするけど、
ま、自由だから好きにやったらええわ。
0159832008/12/25(木) 15:30:11ID:2wMGCLSI
>>157
有り難う御座います。正確に動作しています。
こういう方法は思いつきもしませんでした。

>>158
ArrayObjectを使用したことがないのでちょっとあれなんですが、
上記のコードよりも簡単に>>153を実装できるのでしょうか?
宜しければサンプルコードを教えて下さい。
0160nobodyさん2008/12/25(木) 15:41:03ID:???
>>159
>>153みたいな実装はしないってことなんだけどね。
a,b,cに意味を持たせる必要があるわけでしょ。
それだったら、
$quickTime
->getBlock(2)
->getMoov("main")
->getTrack("hoge");
みたいに、それぞれの階層に合わせたオブジェクトを作成して、
メソッドで順次取得するっていう話。

んで、ArrayObjectを使えばショートカット的に配列で処理できる。
$quickTime[1]["main"]["hoge"]で、参照を取得できるから、
値のセットもゲットも普通に実装出来るしね。
まぁ、offsetSetの時に一工夫は必要だけど。

ただ、簡単に実装というのは人によって意味が違うから何とも言えん。
わかりやすいかどうかは主観の問題だからね。
0161nobodyさん2008/12/25(木) 15:44:18ID:???
setValueの引数を可変にすりゃいいんでね?
0162832008/12/25(木) 16:10:25ID:2wMGCLSI
>>160
現状でパース後の配列は
$quickTime[1]["main"]["hoge"] = $data;
のようになっています。

$arr = array(1, 'main', 'hoge');
から
$quickTime[1]["main"]["hoge"]
にどうsetやgetが簡単にできるかっていうので悩んでいます。

わかりやすいというよりかは直感的な操作が目的です。
確かにそのように関数作るのも良いのですが、ツリー型で出来れば記録したいところです。
ただAtomってのはややこしいんですが、同一断層に同じ名前のAtomが出てくることもあるので、
そこら辺の条件分岐をやってるとどうしても複雑になってきます。
XMLに似てる感じです。

>>161
結局内部ではarrayとして扱われるのでそれをどう処理するかがミソです。
0163nobodyさん2008/12/25(木) 17:28:45ID:???
>>83
foreach + 参照渡しを使えばいいよ

$tree = array('a' => array('b' => array('c' => 'C')));
$indexes = array('a', 'b', 'c');

$node =& $tree;
foreach ($indexes as $index) {
  $node =& $node[$index];
}

echo 'node: ', var_export($node, true), PHP_EOL;
echo 'tree before: ', var_export($tree, true), PHP_EOL;
$node = array('new' => 'value');
echo 'tree after: ', var_export($tree, true), PHP_EOL;


注意点は $value =& $array[$key] が実行された際にキー $key が存在しない場合
無言で配列に要素が作られてしまう事
これはPHPのアンドキュメントな動作なので
嫌なら array_key_exists() でチェックしてね
0164nobodyさん2008/12/25(木) 19:23:56ID:???
$indexesは
$indexes = array_keys($tree);
でいいな
0165nobodyさん2008/12/25(木) 19:39:15ID:???
>>164
よくない。何質問されてるのか分かってないのかよ
0166nobodyさん2008/12/25(木) 19:49:40ID:???
>>163
それは質問の答えになってないんじゃない?
新しいノードを追加じゃなくて、cにarrayが追加になってるよね。
c=>'C'の'C'を書き変えたいわけでしょ
■ このスレッドは過去ログ倉庫に格納されています