Как максимально перемешать строки?
Каждый IP адрес это 32-битное целое.
Можно отсортировать по обратному порядку бит в числе – это здорово раскидает соседние адреса.
Понадобятся три функции:function ip2n( $ip ) { // строку ip перевести в целое
	$ipa = explode('.', $ip);
	return $ipa[0]<<24 | $ipa[1] << 16 | $ipa[2] << 8 | $ipa[3];
}

function n2ip( $n ) { // целое перевести в строку ip
	return implode('.', array(
		$n >> 24 & 0xFF,
		$n >> 16 & 0xFF,
		$n >> 8  & 0xFF,
		$n & 0xFF
	));
}

function bitreverse( $n ) { // развернуть порядок бит в 32-битном целом
	return bindec( strrev( sprintf( '%032b', $n)));
}
Теперь остаётся загрузить ваши ip в массив, и прогнать через ip2n, bitreverse, обычную сортировку целых по возрастанию, bitreverse и n2ip. Пример:$ips = array(
	'192.168.1.15',
	'192.168.1.16',
	'192.168.1.17',
	'95.181.217.91',
	'95.181.217.96',
	'95.181.217.97',
	'91.216.3.90',
	'91.216.3.91',
	'91.216.3.99',
	'5.62.157.78',
	'5.62.157.84',
	'5.62.157.87',
);

$ips = array_map( 'ip2n', $ips);
$ips = array_map( 'bitreverse', $ips);
sort( $ips, SORT_NUMERIC);
$ips = array_map( 'bitreverse', $ips);
$ips = array_map( 'n2ip', $ips);

print_r($ips);
/* Array
(
    [0] => 95.181.217.96
    [1] => 192.168.1.16
    [2] => 5.62.157.84
    [3] => 91.216.3.90
    [4] => 5.62.157.78
    [5] => 95.181.217.97
    [6] => 192.168.1.17
    [7] => 91.216.3.99
    [8] => 95.181.217.91
    [9] => 91.216.3.91
    [10] => 5.62.157.87
    [11] => 192.168.1.15
) */
только вручную программировать