我有一个带有一些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);
}
答案 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);
}