PHP で深くネストされた連想配列を作成する際に問題があります。あちこちで見た質問/回答から、参照を使用する必要があると収集しましたが、その方法がわかりません。
私はPHP 5.3を使用しています
JSON のようなファイルを解析しています。中括弧で囲まれたネストされた「セクション」が含まれており、ネストされた連想配列を使用してファイルのツリー表現を構築したいと考えています。
ルート セクションと「現在のセクション」変数から始めます。
$rootSection = array();
$currentSection = $rootSection;
$sections = array();
新しいセクション ('{') に入るときは、次のようにします。
$currentSection[$newSectionName] = array();
array_push($sections, $currentSection);
$currentSection = $currentSection[$newSectionName];
変数を使用して$sections
、セクション ('}') からその親セクションに飛び出します。
$currentSection = array_pop($sections);
最後に、セクションにプロパティを追加したい場合は、基本的に次のようにします。
$currentSection[$name] = $value;
これまでのところ何も機能していないため、上記のコードから参照を使用しようとする試みをすべて削除しました...参照がデフォルトであるJavascriptに慣れていると言えます...
しかし、明らかにPHPには当てはまりませんか?解析コードで変数をダンプしたところ、すべてのプロパティが同じ配列に正しく追加されていることがわかりましたが、rootSection
配列または内部にプッシュされた$sections
ものは同じように更新されませんでした。
私は数時間これを行う方法を探していましたが、本当にわかりません.
更新: 解決策
chrislondon のおかげで、=&
もう一度使用してみましたが、なんとか機能しました。
初期コード:
$rootSection = array();
$currentSection =& $rootSection;
$sections = array();
新しいセクション ('{'):
$currentSection[$newSectionName] = array();
$sections[] =& $currentSection;
$currentSection =& $currentSection[$newSectionName];
セクションの終了 ('}'):
$currentSection =& $sections[count($sections) - 1];
array_pop($sections);
PHP 5.3 以降では、次のようなことを行うことarray_push($a, &$b);
は推奨されなくなり、警告がトリガーされることに注意してください。$b =& array_pop($a)
も許可されていません。そのため、[]=
/演算子を使用して配列[]
にプッシュ/「ポップ」しています。$sections
最初に問題があったのは、実際にはセクション スタックへのプッシュ/ポップでした。配列への参照を維持できず、常にコピーを取得していました。
ご協力いただきありがとうございます :)