I have the following array:
Array
(
[0] => Array
(
[url] => https://website1.com/
[remote_address] => Array
(
[ip] => 1.1.1.1
[port] => 443
)
[headers] => Array
(
[date] => Mon, 31 Jan 2022 11:16:30 GMT
[content-type] => text/html
)
)
[1] => Array
(
[url] => https://www.website1.com/
[remote_address] => Array
(
[ip] => 1.1.1.1
[port] => 443
)
[headers] => Array
(
[date] => Mon, 31 Jan 2022 11:16:30 GMT
[content-encoding] => gzip
)
)
[2] => Array
(
[url] => https://www.website2.com/
[remote_address] => Array
(
[ip] => 2.2.2.2
[port] => 443
)
[headers] => Array
(
[date] => Mon, 31 Jan 2022 11:16:30 GMT
[content-encoding] => br
)
)
[3] => Array
(
[url] => https://www.website3.com/
[remote_address] => Array
(
[ip] => 3.3.3.3
[port] => 443
)
[headers] => Array
(
[date] => Mon, 31 Jan 2022 11:16:30 GMT
[content-encoding] => br
)
)
[4] => Array
(
[url] => https://www.website2.com/
[remote_address] => Array
(
[ip] => 2.2.2.2
[port] => 443
)
[headers] => Array
(
[date] => Mon, 31 Jan 2022 11:16:30 GMT
[content-encoding] => gzip
)
)
[5] => Array
(
[url] => https://www.website4.com/
[remote_address] => Array
(
[ip] => 4.4.4.4
[port] => 443
)
[headers] => Array
(
[date] => Mon, 31 Jan 2022 10:44:46 GMT
[content-encoding] => gzip
)
)
)
Using PHP (7.4) how can could I interate the array, find all IP:s and then count unique IP:s that is not the first IP in the array? Right know I'm kind of lost when trying to iterate and maybe that I'm thinking the array i multidimensional?
The "mother" IP that should not be included in the count could be fetched outside this array as an variable.
Any help appreciated, thanks.
CodePudding user response:
So your problem appears to be you dont know how to iterate over an array.
A simple foreach loop would suffice here
// init the array to hold the ips and their counts.
$ips = [];
foreach( $bigArray as $inner ) {
$ip = $inner['remote_address']['ip']
if ( array_key_exists($ip, $ips) ) {
// we saw this IP before, so add 1 to count
$ips[$ip]['count'] ;
} else {
// first time we saw this ip, create entry in ips array with count of zero
$ips[$ip] = ['count' => 0];
}
}
print_r($ips);
This copes with not counting the first occurance of the ip, if you want to count that one also just start the counter off at 1 instead of 0.
