2016-12-18 3 views
0

Допустим, у меня есть следующие массивы в PHP:Получение числа вокруг массива последовательных чисел

$array1 = array(5,6); 
$array2 = array(89,90,91); 
$array3 = array(75,76,77,78); 
$array4 = array(3); 
$array5 = array(65,64,63); 

мне нужна функция, которая получит число вокруг чисел в массиве, вывод должен быть следующим:

$array1around = getAround($array1); // Result: array(4, 7); 
$array2around = getAround($array2); // Result: array(88, 92); 
$array3around = getAround($array3); // Result: array(74, 79); 
$array4around = getAround($array4); // Result: array(2,4); 
$array5around = getAround($array5); // Result: array(62,65); 

Возможно ли, если вы не играете с -1 и +1 для мин и макс? Я хотел бы видеть лучший способ добиться этого.

ответ

3
function getAround($array) 
{ 
    return [min($array) - 1 ,max($array) + 1] ; 
} 

Это код, который вам нужен, конечно, если на них запущены некоторые массивы с петлей.

1

в вашем случае (элементы в порядке сортировки):

function getAround($array) 
{ 
    return [$array[0] - 1, $array[count($array) - 1] + 1); 
} 

Edit (после редактирования этого вопроса):

Если использование max($array) + 1 и min($array) - 1.

+1

Что, если числа не в правильном порядке? (Проверить мое последнее редактирование) – Coder

2
function getAround(array $a) { 
    if (count($a) <= 1) { 
    return $a; 
    } 

    sort($a); 

    return [$a[0] - 1, $a[count($a) - 1] + 1]; 
} 

Но лучше использовать min() и max() функции, как в принятом ответе, для лучшей производительности.

+0

sort is O (nlogn), а max - O (n) –

+0

Это не будет работать, если массив имеет последовательные номера, но в неправильном порядке. – Coder

+0

@ RuslanOsmanov попробуйте его с пятого примера :) – Coder

Смежные вопросы