найти среднее в оригинальной функции (и другие проблемы!) - PullRequest
0 голосов
/ 10 июля 2011

Может кто-нибудь исправить мои функции?

Во-первых, как мне получить среднее значение из моих чисел, которые используются в функции суммы?Какие переменные я могу использовать, чтобы разделить числа, если я не знаю, сколько чисел будет использовано?

Во-вторых, почему не работает моя функция поиска замены?Когда я запускаю строку с «плохими» словами, я получаю (я только что безобразно ввел):

array(1) { [0]=> string(4) "nice" }

Я хочу, чтобы вся строка возвращалась с заменой только плохих слов ...

также, даже если она там не возвращает длину строки и количество слов в строке!Грр ... Довольно расстроен, поэтому я был бы очень признателен за любую помощь ...

Файл один: (чтобы получить возврат функций)

    <?php
    require('myfunctions.php');
    if($_POST) {
    $result = phptest($_POST['input']);
    if ($result === false) {
    echo 'No rude words were found.';
    } else {
    var_dump($result);
    }
    }
    ?>

    <?php
    echo "<br/> Sum function:".sum(1,2,3,4)."<br/>";
    echo "Average function:".mean(1,2,3,4)."<br/>";
    ?>

    <form action="" method="post">
    <input name="input" type="text" size="20" maxlength="20" />
    <input name="submit" type="submit" value="submit" />
    </form>

myfunctions:

    <?php
    function sum()
    {
    $sum = 0;
    for ($i=0; $i<func_num_args(); $i++) $sum+= func_get_arg($i);
    return $sum;
    }

    ?>
    <?php
    function phptest($input) {
    $search = array('ugly', 'rude');
    $replace = array('nice', 'sweet');
    $output = str_ireplace($search, $replace, $input, $replace_count);
    if ($replace_count === 0) {
    return false;
    } else {
    return explode(' ', $output);
    }
    }

    ?>

Ответы [ 2 ]

2 голосов
/ 10 июля 2011

Не нужно изобретать велосипед. Воспользуйтесь преимуществами нативных функций PHP, таких как array_sum() в сочетании с вашими func_* функциями.

function sum() {
  return array_sum(func_get_args());
}

function avg() {
  $args = func_num_args();

  if ($args == 0) {
    return 0;
  }

  return array_sum(func_get_args()) / $args;
}

Что касается вашей функции phptest(), см. Комментарий Glass Robot .

0 голосов
/ 10 июля 2011

Я бы порекомендовал использовать встроенную PHP-функцию array_sum(), а не использовать собственную функцию sum().

Допустим, у вас есть набор чисел, с которым вы хотите работать.Если вы поместите их в массив, вы можете использовать array_sum(), чтобы сложить их, и count(), чтобы узнать, сколько их чисел.

<?php
$data = array(1,2,3,4);
echo "<br/> Sum function:".array_sum($data)."<br/>";
echo "Average function:".(array_sum($data) / count($data))."<br/>";
?>

Если вы настаиваете при написании собственной функции mean() в стиле существующей функции sum(), вы уже ответили на свой вопрос, используя func_num_args(), который делает именно то, что вы запрашиваете, и говорит вам, какв функцию было передано много аргументов.

Когда речь заходит о вашем втором вопросе, я воздержусь от прямого ответа, поскольку вся тема фильтров ненормативной лексики на этом сайте забита до смерти.Обычно считается, что решить эту проблему невозможно, поскольку всегда легко обойти любые фильтры, и они обычно выдают ложные срабатывания в самые неудачные моменты (даже если ваша функция сработает, это приведет к нарушению Clubttic error . Но если вы настаиваете на его написании, я направлю вас к этому вопросу здесь, на SO, который имеет хороший ответ для PHP: Как заменить плохие слова на php?

Надеюсь, это поможет.

...