/**
* @param array $input
* @param array $items
*
* @return int|null
*/
function compare(array $input, array $items)
{
foreach ($items as $index => $item) {
$compareResult = version_compare(implode('.', $input), implode('.', $item));
if ($compareResult <= 0) {
if ($compareResult === 0 || !array_key_exists($index - 1, $items)) {
return $index;
}
return $index - 1;
}
}
return null;
}
$items = [
[1, 1, 1],
[1, 2, 1],
[1, 2, 2],
[1, 5, 4],
[1, 5, 6],
[2, 1, 6],
[2, 2, 2],
];
$input = [1, 5, 5];
if (null === $index = compare($input, $items)) {
echo 'Элемент не найден';
} else {
echo "Элемент под номером {$index} является наиболее близким";
}
function nearest( $sample, $arr) {
$found = false;
foreach( $arr AS $row) {
if($row[0] <= $sample[0] && $row[1] <= $sample[1] && $row[2] <= $sample[2]) $found = $row;
else break;
}
return $found;
}
$data = [
[1, 1, 1],
[1, 2, 1],
[1, 2, 2],
[1, 5, 4],
[1, 5, 6],
[2, 1, 6],
[2, 2, 2],
];
echo implode(',', nearest( [1,5,5], $data)); // 1,5,4