Проверить массив

271
15 сентября 2017, 22:09

Если массив пустой выводиться сообщение "Ошибка в параметре, оно должно быть числом!". Если в массиве 'Слово' вновь выводится "Ошибка в параметре, оно должно быть числом!". Если в массиве все числа, то выводится сумма чисел массива. Как дописать эту функцию чтобы она проверяла массив на наличие переменных string, false, float и выводилась бы только сумма целых чисел? Массив, например такой $arr = [10, 20, 11.5, 'Слово', false];

<?php
$arr = [10, 20, 11.5, 'Слово', false];

function control($data)
 {
   if (empty($data)) 
     {
      echo 'Ошибка в параметре, оно должно быть  числом!';
       return;
      }

      $sum = 0;
      foreach ($data as $value)
      $sum += $value;
          return $sum;
  }
echo control ($arr);
?>
Answer 1

Я бы сделал вот так:

<?php
$arr = [10, 20, 11.5];
function control($data)
{
    $filtered = array_filter($data, function($v) {
        return is_int($v);
    });
    if (count($data) < 1 || count($data) != count($filtered)) {
        echo 'Все параметры должны быть целыми числами';
        return;
    }
    return array_sum($filtered);
}
echo control($arr);
Answer 2

Делаете аналогичную проверку в foreach

function control($data)
 {
   if (empty($data)) 
   {
       echo 'Ошибка в параметре, оно должно быть  числом!';
       return;
   }

   $sum = 0;
   foreach ($data as $value) {
      if (!is_int($value)) {
          echo 'Ошибка в параметре, оно должно быть  числом!';
          return;
      }
      $sum += $value;
   }
   return $sum;
}
Answer 3
<?php
function control($data) {
    $clear_data = filter_var_array(['numbers' => $data], [
        'numbers' => [
            'filter' => FILTER_VALIDATE_INT,
            'flags' => FILTER_REQUIRE_ARRAY
        ]
    ]);
    $clear_data = array_filter($clear_data['numbers'], 'strlen');
    if(empty($clear_data) || count($clear_data) < count($data)) {
        return 'Ошибка в параметре, оно должно быть  числом!';
    }
    return array_sum($clear_data);
}
control([10, 20, 11.5, 'Слово', false]); // Ошибка
control([10, 20, 11.5]); // Ошибка
control([10, 20]);  // 30
Answer 4
$arr = [10, 20, 11.5, 'Слово', false];
function arrayNumericalSum($arr){
    if(!empty($arr) && array_sum(array_map('is_numeric', $arr)) == count($arr)){
        return array_sum($arr);
    }else{
        return false;
    }
}
if(($sum = arrayNumericalSum($arr))){
    echo $sum;
}else{
    echo 'Ошибка в параметре, оно должно быть  числом!';
}

Если нужно проверить и на числа с плавающей точкой (точнее выдавать ошибку если в массиве что то кроме int) то замените is_numeric на is_int

READ ALSO
ajax, метод POST

ajax, метод POST

Не понимаю, почему, если в отправке не указать путь к файлу, то будет ошибка 404?

270
Как вывести данные?

Как вывести данные?

Как мне обратиться к объекту, чтобы вывести World?

222
Фильтрация по выбранной радиокнопке yii2

Фильтрация по выбранной радиокнопке yii2

Есть три радиокнопки и кнопка submit в контроллере есть условия типа если выбран такой то чекбокс,то выводи из базы данных цену товаров диапазоне...

246
Пагинация для Wordpress

Пагинация для Wordpress

Я сделал пагинацию, которая работает для главной страницы (indexphp), где я вывожу посты всех рубрик (cat)

304