<?php
function key_values($key) {
if ($key[0] == '>') {
[$lower, $upper] = [substr($key, 1), 'INF'];
}
else {
[$lower, $upper] = explode('-', $key);
}
return [$lower, $upper];
}
function convert_slabs($slabs) {
$bounds = array();
$last_value = reset($slabs);
[$lb, $ub] = [$lower, $upper] = key_values(key($slabs));
while ($value = next($slabs)) {
[$lower, $upper] = key_values(key($slabs));
// new entry required?
if ($value != $last_value) {
$bounds[] = (object)['lb' => $lb, 'ub' => $ub, 'value' => $last_value];
[$lb, $ub] = [$lower, $upper];
$last_value = $value;
}
else {
// no, just extend the upper bound
$ub = $upper;
}
}
// add the last object
$bounds[] = (object)['lb' => $lb, 'ub' => $ub, 'value' => $last_value];
return $bounds;
}
$slabs_array = array(
[ '0-300' => 2.5, '300-500' => 2.5, '500-1000' => 2.5, '1000-5000' => 2.4, '>5000' => 2.4 ],
[ '0-300' => 1.2, '300-500' => 1.2, '500-1000' => 1.2, '1000-5000' => 1.3, '>5000' => 1.4 ],
[ '0-300' => 2.5, '300-500' => 2.5, '500-1000' => 2.5, '1000-5000' => 2.5, '>5000' => 2.5 ],
[ '0-300' => 4.5, '300-500' => 2.5, '500-1000' => 2.5, '1000-5000' => 2.5, '>5000' => 3.5 ],
[ '0-300' => 4.5, '300-500' => 3.5, '500-1000' => 3.5, '1000-5000' => 3.5, '>5000' => 3.5 ],
[ '0-300' => 1.5, '300-500' => 2.5, '500-1000' => 2.5, '1000-5000' => 2.5, '>5000' => 1.5 ],
[ '0-300' => 1.5, '300-500' => 2.5, '500-1000' => 3.5, '1000-5000' => 2.5, '>5000' => 3.5 ],
[ '0-300' => 1.5, '300-500' => 2.5, '500-1000' => 2.5, '1000-5000' => 1.5, '>5000' => 1.5 ]
);
foreach ($slabs_array as $slabs) {
$result = convert_slabs($slabs);
echo str_replace('},{', "},\n{", json_encode($result)) . PHP_EOL . PHP_EOL;
}
- Output for 7.4.0 - 7.4.33, 8.0.1 - 8.0.30, 8.1.0 - 8.1.33, 8.2.0 - 8.2.29, 8.3.0 - 8.3.25, 8.4.1 - 8.4.12
- [{"lb":"0","ub":"1000","value":2.5},
{"lb":"1000","ub":"INF","value":2.4}]
[{"lb":"0","ub":"1000","value":1.2},
{"lb":"1000","ub":"5000","value":1.3},
{"lb":"5000","ub":"INF","value":1.4}]
[{"lb":"0","ub":"INF","value":2.5}]
[{"lb":"0","ub":"300","value":4.5},
{"lb":"300","ub":"5000","value":2.5},
{"lb":"5000","ub":"INF","value":3.5}]
[{"lb":"0","ub":"300","value":4.5},
{"lb":"300","ub":"INF","value":3.5}]
[{"lb":"0","ub":"300","value":1.5},
{"lb":"300","ub":"5000","value":2.5},
{"lb":"5000","ub":"INF","value":1.5}]
[{"lb":"0","ub":"300","value":1.5},
{"lb":"300","ub":"500","value":2.5},
{"lb":"500","ub":"1000","value":3.5},
{"lb":"1000","ub":"5000","value":2.5},
{"lb":"5000","ub":"INF","value":3.5}]
[{"lb":"0","ub":"300","value":1.5},
{"lb":"300","ub":"1000","value":2.5},
{"lb":"1000","ub":"INF","value":1.5}]
preferences:
110.23 ms | 409 KiB | 5 Q