如何将hash散列的perl hash转换为php

时间:2016-03-30 14:57:10

标签: php perl hash

我目前正在寻找将一些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];

我可以指出我的错误吗

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