【问题标题】:foreach printing array elementsforeach 打印数组元素
【发布时间】:2014-04-16 14:29:31
【问题描述】:

我正在尝试遍历多个数组元素,并基于数组,我正在尝试打印每个元素及其对应的值。

@_disk = ('0:0','0:1');
@_diskStatus= ('OK','Critical');

这是我尝试过的,我不确定如何使用条件来获得所需的输出:

foreach (@_diskID, @_diskStatus)
{
    # Print the data in JSON
    print "\t,\n" if not $_first;
    $_first = 0;

    print "\t{\n";
    print "\t\t\"{#DISKID}\":\"$_\"\n";
    print "\n\t}\n";
}

print "\n\t]\n";
print "}\n";

期望的输出

 {
        "data":[

        {
            "{#DISKID}":" 0:0"

        }
        ,
        {
            "{#STATUS}":" Ok"

        }
        ,
        {
            "{#DISKID}":" 0:1"

        }
        ,
        {
            "{#STATUS}":" Critical"

        }

        ]
}

【问题讨论】:

    标签: perl scripting


    【解决方案1】:

    如果两个数组的大小始终相同,则遍历数组的索引会比遍历实际元素更简单。

    # only need one array here because they are the same size
    foreach my $i ( 0 .. $#_diskID ) { 
       ...
    }
    

    另外,不需要在 Perl 中构建这样的 JSON 字符串,CPAN 上有一个名为 JSON 的不错的模块,它可以从哈希中为您创建它们。

    所以,知道了这一点,您可以简单地创建一个哈希:

    use strict;
    use warnings;
    
    use JSON;
    
    my @_disk = ('0:0','0:1');
    my @_diskStatus= ('OK','Critical');
    
    my %json_hash = ( data => [] );
    foreach my $i ( 0 .. $#_disk ) {
       push @{$json_hash{data}},
          { '{#DISKID}' => $_disk[$i],
            '{#STATUS}' => $_diskStatus[$i],
          };
    }
    
    my $json_string = encode_json \%json_hash;
    print "$json_string\n";
    
    # prints
    # {"data":[{"{#STATUS}":"OK","{#DISKID}":"0:0"},{"{#DISKID}":"0:1","{#STATUS}":"Critical"}]}
    

    【讨论】:

    • 感谢您的帮助 :) 我的脚本能力很差,我不知道有这样的模块存在,再次感谢您的时间。
    【解决方案2】:

    假设两个数组具有相同数量的元素:

    use warnings;
    use strict;
    
    my @_disk = ('0:0','0:1');
    my @_diskStatus = ('OK','Critical');
    
    for my $i (0 .. $#_disk) {
        print "$_disk[$i] $_diskStatus[$i]\n";
    }
    

    【讨论】:

    • 感谢您的帮助!
    猜你喜欢
    • 2011-03-23
    • 1970-01-01
    • 2016-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-05
    • 2019-07-22
    相关资源
    最近更新 更多