Правильное использование функций PHP

Пусть у нас дан вот такой массив с четырехзначными числами:

<?php $arr = ['1524', '1321', '4563', '7144', '2879']; ?>

Давайте запишем в новый массив только те элементы, сумма первых двух цифр в которых равна сумме вторых двух цифр.

Очевидно, что для решения задачи необходимо перебирать циклом наш массив и проверять каждый элемент. Давайте вынесем проверку в отдельную функцию, назвав ее checkDigitsPairsSum (проверить суммы пар цифр). Пусть эта функция параметром принимает четырехзначное число и проверяет суммы пар цифр. Если суммы равны, пусть функция возвращает true, а если не равны - false.

Не будем пока реализовывать описанную функцию, а будем писать дальнейший код так, как будто у нас уже есть эта функция, а затем ее реализуем. Итак, если бы у нас была описанная функция, мы бы легко решили поставленную задачу вот так:

<?php $result = []; $arr = ['1524', '1321', '4563', '7144', '2879']; foreach ($arr as $elem) { if (checkDigitsPairsSum($elem)) { // используем нашу функцию $result[] = $elem; } } var_dump($result); ?>

Напишем теперь реализацию нашей функции:

<?php function checkDigitsPairsSum($num) { $sum1 = $num[0] + $num[1]; $sum2 = $num[2] + $num[3]; if ($sum1 === $sum2) { return true; } else { return false; } } ?>

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

<?php function checkDigitsPairsSum($num) { $sum1 = $num[0] + $num[1]; $sum2 = $num[2] + $num[3]; return $sum1 === $sum2; } ?>

Упростим еще больше:

<?php function checkDigitsPairsSum($num) { return $num[0] + $num[1] === $num[2] + $num[3]; } ?>

Окончательный код будет выглядеть так:

<?php $result = []; $arr = ['1524', '1321', '4563', '7144', '2879']; foreach ($arr as $elem) { if (checkDigitsPairsSum($elem)) { $result[] = $elem; } } var_dump($result); function checkDigitsPairsSum($num) { return $num[0] + $num[1] === $num[2] + $num[3]; } ?>

Дана функция, которая параметром принимает целое число и возвращает сумму его цифр:

<?php function getDigitsSum($num) { return array_sum(str_split($num, '')); } ?>

С помощью приведенной функции найдите все года от 1 до 2030, сумма цифр которых равна 13.

Преимущества

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

<?php foreach ($arr as $elem) { if (checkDigitsPairsSum($elem)) { $result[] = $elem; } } ?>

При чтении кода сразу становится более-менее понятно, что именно проверяется в условии - находится и проверяется какая-то сумма пар чисел.

Очевидность нашего кода достигается удачно подобранным названием функции. Представьте себе, что мы бы назвали нашу функцию просто func:

<?php foreach ($arr as $elem) { if (func($elem)) { $result[] = $elem; } } ?>

Как вы видите, код теперь далеко не такой очевидный! Понадобится детально изучить код функции func, чтобы понять, что же она такое делает.