<?php
function createCompressedString($shorts)
{
$compressLen = $compressPos = $currentLen = $currentPos = 0;
$inBlock = false;
for ($i = 0; $i < 8; $i++) {
if ($shorts[$i] === 0) {
if (!$inBlock) {
$inBlock = true;
$currentPos = $i;
}
$currentLen++;
} else if ($inBlock) {
if ($currentLen > $compressLen) {
$compressLen = $currentLen;
$compressPos = $currentPos;
}
$inBlock = false;
$currentPos = $currentLen = 0;
}
}
if ($inBlock) {
$compressLen = $currentLen;
$compressPos = $currentPos;
}
if ($compressLen === 8) {
return '::';
}
if ($compressLen > 1) {
$replace = $compressPos === 0 || $compressPos + $compressLen === 8 ? ['', ''] : [''];
array_splice($shorts, $compressPos, $compressLen, $replace);
}
return implode(':', array_map(function($short) {
return $short === '' ? '' : dechex($short);
}, $shorts));
}
var_dump(createCompressedString([1, 0, 0, 0, 0, 0, 0, 0]));
preferences:
47.98 ms | 402 KiB | 5 Q