PHP | Отделяйте нечетные и четные элементы из массива без использования цикла

Опубликовано: 24 Февраля, 2022

В PHP дан массив из n элементов. Вы должны отделить элементы от массива на основе нечетных или четных элементов. То есть печатать нечетный массив и четный массив отдельно, без обхода исходного массива или использования какого-либо цикла.

Примеры:

Вход: массив (2, 5, 6, 3, 0)
Выход: Нечетный массив: 5, 3
         Четный массив: 2, 6, 0

Ввод: $ input = array (0, 1, 2, 3, 4, 5)
Выход: Нечетный массив: 1, 3, 5
         Четный массив: 0, 2, 4

Рекомендуется: сначала попробуйте свой подход в {IDE}, прежде чем переходить к решению.

Проблемы такого типа можно легко решить, пройдя по массиву и распечатав нечетные и даже нечетные элементы по отдельности, но для этого потребуется больше строк кода, а также накладные расходы на цикл в нашем коде. Итак, чтобы избежать использования цикла, мы попробуем использовать некоторые встроенные функции PHP. Здесь мы используем две функции массива PHP array_filter () и array_values () для решения этой проблемы.

  • array_filter (): эта функция будет использоваться для фильтрации нечетных / четных элементов из входного массива.
  • array_values (): эта функция будет использоваться для повторного индексирования нечетного и четного массива, поскольку после array_filter нечетный и четный массив имеют тот же индекс, что и их элементы во входном массиве.

Примечание. Функция array_filter () будет фильтровать только нечетные / четные индексированные элементы вместе со значением их индекса. После применения функции array_filter () индекс нечетного массива будет равен 1, 3, 5, а индекс четного массива будет равен 0, 2, 4.

Алгоритм:

  1. Фильтрующие элементы:
    • фильтровать нечетные элементы с помощью array_filter ().
    • фильтровать даже элементы с помощью array_filter ().
  2. Переиндексировать массивы:
    • переиндексировать нечетный массив с помощью array_values ().
    • переиндексируйте четный массив с помощью array_values ().
  3. Распечатайте оба массива - нечетный / четный.

Below is the PHP implementation of above algorithm:

<?php
  
// PHP program to separate odd-even indexed
// elements of an array
  
// input array 
$input = array(4, 3, 6, 5, 8, 7, 2);
  
// comparator function to filter odd elements
function oddCmp($input)
{
    return ($input & 1);
}
  
// comparator function to filter odd elements
function evenCmp($input)
{
    return !($input & 1);
}
  
// filter odd-index elements
$odd = array_filter($input, "oddCmp");
  
// filter even-index elements
$even = array_filter($input, "evenCmp");
  
// re-index odd array by use of array_values()
$odd = array_values(array_filter($odd));
  
// re-index even array by use of array_values()
$even = array_values(array_filter($even));
  
// print odd-indexed array
print"Odd array : ";
print_r($odd);
  
// print even-indexed array
print" Even array : ";
print_r($even);
  
?>

Выход :

Нечетный массив:
Множество
(
    [0] => 3
    [1] => 5
    [2] => 7
)

Четный массив:
Множество
(
    [0] => 4
    [1] => 6
    [2] => 8
    [3] => 2
)
PHP