繁体   English   中英

如何将哈希哈希的Perl哈希转换为PHP

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM