Re: Sorting IP Address Data
| From: | Steve Edberg | Date: | Thu, 23 Aug 2001 07:32:23 +0000 |
| Subject: | Re: Sorting IP Address Data | ||
| References: | 1 2 3 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-64052@lists.php.net to get a copy of this message | ||
And if the numbers are from different subnets, you could sort like so (assuming addresses are in a 1-dimensional array, here called $IpAddresses):
function sort_address($IpAddresses) {
$List = array();
foreach ($IpAddresses as $A) {
list($x,$y,$z,$t) = explode('.', $A);
$List[($x*16777216) + ($y*6553616) + ($z*256) + $t] = $A;
}
ksort($List, SORT_NUMERIC);
return array_values($List);
}
My first thought was to use the line
$List[($x<<24) + ($y<<16) + ($z<<8) + $t] = $A;instead, and gain a little speed advantage by bitshifting instead of multiplying, but then you'd need to force $x, $y, $z and $t to integers first. You might be able to do
$List[(((int)$x)<<24) + (((int)$y)<<16) + (((int)$z)<<8) + $t] = $A;or
$List[(($x+0)<<24) + (($y x+0)<<16) + (($z x+0)<<8) + $t] = $A;instead, though. If you wanted 'em in REVERSE order, use krsort() instead of ksort(). Usual 'untested code' warnings apply. - steve At 2:15 PM +1000 8/23/01, Chris Fry <chris@quillsoft.com.au> wrote:
Chris, Understand the problem now. All you need to keep is the last octect of the IP Address. The following code snippet generates an array entry for each ip. The array is then sorted and the result prepended with the base IP. <? $strBaseIP = "127.0.0.";-- +------------------------ Open source questions? ------------------------+ | Steve Edberg University of California, Davis | | sbedberg@ucdavis.edu Computer Consultant | | http://aesric.ucdavis.edu/ http://pgfsun.ucdavis.edu/ | +----------- http://pgfsun.ucdavis.edu/open-source-tools.html -----------+for ($i=0;$i<=255;$i++) { $strIP = $i; print "IP = $strIP<br>"; $aryIP[$i] = $strIP;} sort($aryIP); for ($i=0;$i<=255;$i++) {$strIP = $strBaseIP.$aryIP[$i];print "IP = $strIP<br>"; } ?> Pretty rough and ready but it should point you in the right direction. If you need to sort IP's from differnet subnets then you need to split the IP as per the previous suggestion. Chris Chris Aitken wrote:Hi all, Just a quick one, I am pulling a whole Class C list of IP addresses, and im trying to sort them in order, but im getting it displayed 127.0.0.1 127.0.0.10 127.0.0.100 127.0.0.101 127.0.0.102 etc. Is there any other way to sort this thinking they are numbers, rather than text ? Thanks Chris ---- Chris Fry Quillsoft Pty Ltd Specialists in Secure Internet Services and E-Commerce Solutions 10 Gray Street Kogarah NSW 2217 Australia Phone: +61 2 9553 1691 Fax: +61 2 9553 1692 Mobile: 0419 414 323 eMail: chris@quillsoft.com.au http://www.quillsoft.com.au You can download our Public CA Certificate from:- https://ca.secureanywhere.com/htdocs/cacert.crtChris Aitken - Administration/Database Designer - IDEAL Internetemail: chris@ideal.net.au phone: +61 2 4628 8888 fax: +61 2 4628 8890__-----------------------------------------__ *** Big Brother ***It just shows that the dull will rule the world. And we will be watching it. -- PHP General Mailing List (http://www.php.net/) To unsubscribe, e-mail: php-general-unsubscribe@lists.php.net For additional commands, e-mail: php-general-help@lists.php.net To contact the list administrators, e-mail: php-list-admin@lists.php.net