2016-03-30 51 views
0

私は現在、PHPにいくつかのperl cgiスクリプトを書き直していますが、主にPHPを学ぶことができます。ハッシュのハッシュのperlハッシュをPHP配列に変換する方法を私の頭で知ることができない限り、すべてうまくいっています。 私はA、B、C、D、Eという5つのネットワークノードを持っています。実際にはそうではありませんが、考え方は同じです。 各ノードは、私はこのようなデータベースにバイト毎インターフェースラウンドポーリング入力を記録するスクリプトを有する各スイッチ10件のインタフェースが10ハッシュのハッシュのperlハッシュをPHPに変換するには

1と呼ばれるものであり、実際にTOP、MIDDLEと呼ばれる3つのスイッチのスタックボトム : -

node switch interface bytes 
A  TOP  1   999 
B  MIDDLE  1   999 
A  MIDDLE  2   999 

など

私はPHPでデータベースを読み取ることができますが、その後、私が剥がれてきます。 Perlで私はデータを読み取り、

`While $ref fetchrow_hashref() { 
    $hash{$ref{'NODE'}}{$ref{'Switch'}}{$ref{'Interface'}=$ref{'Bytes'} 
}` 

ので、データベースのクエリは、今、私は999

を返す名前 $hash{A}{Top}{1}を使用して、私のCGIコードで任意の値にアクセスすることができますがループすることでハッシュのハッシュに格納します

しかし、配列の連想配列でPHPで同様のことをしようとすると、間違っています。私は私へのポインタを持つことができますしてください私はハッシュののvar_dumpが正しいよう

$hash[]=[$ref["NODE"}=> 
    [$ref["Switch"]=> 
     [$ref["Interface"]=> 
      $ref["Bytes"] 
     ] 
    ] 
]; 

を使用しましたが、私は print $hash[A][TOP][1];

を使用して配列のうち、値を印刷できるようにするには表示されません。

while($ref=somefetchingfunction_or_method()) { 
    $hash[$ref['NODE']][$ref['Switch']][$ref['Interface']]=$ref['Bytes']; 

(すなわちちょうど[すべて{、を交換することになるミス

+0

PHPコードの '$ ref'配列は何ですか? $ hash ['A'] ['TOP'] [1] 'の値を設定すると、同じように戻ってきます。参照はPHPで自動的に参照解除されるため、配列や参照配列の繰り返し処理はまったく同じです。 – syck

答えて

1

]によると、行方不明最後]を固定)

編集:sscce

<?php 
$hash = []; 
foreach(gen_fetch() as $ref) { 
    $hash[$ref['NODE']][$ref['Switch']][$ref['Interface']]=$ref['Bytes']; 
} 
echo $hash['A']['TOP'][1]; 

// generator requires php version >= 5.5, see http://php.net/language.generators.overview 
function gen_fetch() { 
    $keys = ['NODE','Switch','Interface','Bytes']; 
    foreach([['A','TOP',1,997],['B','MIDDLE',1,998],['A','MIDDLE',2,999]] as $r) { 
     yield array_combine($keys,$r); 
    } 
} 

プリント997

+0

ありがとうございました。元の投稿の誤字をおかけして申し訳ありません。 – user3872809

関連する問題