如何在多维数组中添加所有数字?

时间:2015-12-09 11:04:17

标签: php arrays multidimensional-array

我有一个带有一些Ip和一些数字的多维数组。我想为每个IP

添加数组中的所有数字

因此,如果我将我的数组返回到浏览器,它看起来像这样:

Array ( 
     [72.00.00.000] => 9962 9980 9984 215 9997 
     [90.00.00.000] => 6157 1586 8422 336 

现在我想在数组中为每个IP添加数字

然后它应该是这样的:

[72.00.00.000] => 40138
[90.00.00.000] => 16501

这就是我的代码现在的样子:

foreach ($topTenIp as $val) {
        $bytes_ips[$val] = shell_exec("grep $val /var/www/laravel/logs/vhosts/domain.log | awk '{print $10}'");
    }

    foreach ( $bytes_ips as $ip => $numList ) {
        $tot = array_sum(explode(' ', $numList));
        echo sprintf("%s => %d\n", $ip, $tot);
    }

我得到的结果是:

72.00.00.000 => 9962 
90.00.00.000 => 6157 

解决代码:

foreach ($topTenIp as $val) {
    $bytes_ips[$val] = shell_exec("grep $val /var/www/laravel/logs/vhosts/domain.log | awk '{print $10}'");
}
foreach ( $bytes_ips as $ip => $numList ) {
    $tot = array_sum(explode("\n", $numList));
    echo sprintf("[%s] => %d\n", $ip, $tot);
}

1 个答案:

答案 0 :(得分:2)

然后你必须单独处理$byte_ips的每一次出现,并将所有空格分隔的数字分成一个数组然后加上数组。喜欢这个

$byte_ips = array(
    '72.00.00.000' => '9962 9980 9984 215 9997',
    '90.00.00.000' => '6157 1586 8422 336'
);

// debugging only
print_f($byte_ips):
// end debugging
foreach ( $byte_ips as $ip => $numList ) {
    $tot = array_sum(explode(' ', $numList));
    echo sprintf("[%s] => %d\n", $ip, $tot);
}

结果是:

[72.00.00.000] => 40138
[90.00.00.000] => 16501

现在您已经发现$byte_ips数组中的数字实际上是由Newlines分隔的,而不是原始问题所说的空格,代码应该是: -

foreach ( $byte_ips as $ip => $numList ) {
    $tot = array_sum(explode("\n", $numList));
    echo sprintf("[%s] => %d\n", $ip, $tot);
}

如果你想要以兆字节为单位的结果,那么你必须将实际上是数字的字符串表示的数字转换为整数,这样你就可以对它进行算术运算,然后改变{{1将结果输出为浮点数

sprintf

现在你得到了

foreach ( $byte_ips as $ip => $numList ) {
    $tot = array_sum(explode("\n", $numList));
    $tot = ((int)$tot / 1024 / 1024);
    echo sprintf("[%s] => %.6f\n", $ip,$tot);
}