我目前正在寻找将一些perl cgi脚本重写为php,主要是为了让我学习php。一切进展顺利,除了我无法理解如何将哈希哈希的perl哈希值转换为php数组。 采取这种情况(不是真的,但想法是一样的) 我有5个网络节点,分别叫做A,B,C,D,E。 每个节点实际上是一个名为TOP,MIDDLE,BOTTOM的3个交换机的堆栈 每个交换机都有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'}
}`
所以现在我可以使用名称访问我的cgi代码中的任何值
$hash{A}{Top}{1}
将返回999
但是当我尝试在php中使用关联数组的数组做类似的事情时,它会出错。我用过
$hash[]=[$ref["NODE"}=>
[$ref["Switch"]=>
[$ref["Interface"]=>
$ref["Bytes"]
]
]
];
散列的var_dump看起来是正确的,但我似乎无法使用数组打印出一个值
print $hash[A][TOP][1];
我可以指出我的错误吗
答案 0 :(得分: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
。