<?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) {
if ($compressPos === 0 || $compressPos + $compressLen === 8) {
array_splice($shorts, $compressPos, $compressLen, ['', '']);
}
}
return implode(':', array_map(function($short) {
return $short === '' ? '' : dechex($short);
}, $shorts));
}
var_dump(createCompressedString([0, 0, 0, 0, 1, 2001, 23234, 21]));
preferences:
45.82 ms | 402 KiB | 5 Q