[英]How to convert perl hash of hash of hash to php
我目前正在寻找将一些perl cgi脚本重写为php的方法,主要是为了可以学习php。 一切进展顺利,除了我无法理解如何将哈希的perl哈希转换为php数组。 以这种情况(不是真实的,但是想法是相同的),我有5个网络节点,分别称为A,B,C,D,E。 每个节点实际上是3个称为TOP,MIDDLE,BOTTOM的交换机的堆栈。每个交换机都有10个称为1到10的接口。
我有一个脚本,它轮询每个接口并在数据库中记录输入字节,如下所示:-
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'}
}`
因此,现在我可以使用名称$hash{A}{Top}{1}
访问cgi代码中的任何值,将返回999
但是,当我尝试在数组中使用关联数组在php中执行类似操作时,就会出错。 我用过
$hash[]=[$ref["NODE"}=>
[$ref["Switch"]=>
[$ref["Interface"]=>
$ref["Bytes"]
]
]
];
哈希的var_dump看起来正确,但是我似乎无法使用print $hash[A][TOP][1];
从数组中print $hash[A][TOP][1];
出一个值print $hash[A][TOP][1];
请问我可以指出我的错误吗
那会是
while( $ref=somefetchingfunction_or_method() ) {
$hash[$ref['NODE']][$ref['Switch']][$ref['Interface']]=$ref['Bytes'];
(即,只需将所有{
替换为[
, }
替换为]
然后修复丢失的最后一个]
。)
编辑: 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
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.