Пусть у нас дан вот такой массив с четырехзначными числами:
<?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
, чтобы понять, что же
она такое делает.