PHP логика и улучшение теста оценки? - PullRequest
2 голосов
/ 10 января 2010
$arr = $results->row();
$score = 0;
foreach ($arr as &$i) {
    switch($i){
        case ($i <= 4 AND $i >= 1):
            $score += 1;
            break;
        case ($i < 8 AND $i > 4):
            $score += 3;
            break;
        case ($i >= 8):
            $score += .5;
            break;
    }
}
    echo $score

Это мой текущий код, который суммирует итоговое значение на основе примерно 30 дБ (SQL) записей. Вроде как сортировочный руберик. Мне нужна помощь по улучшению вышеуказанного кода. Есть ли лучший способ сделать это?

Также. Некоторые из них (т. Е. Строки 3,5,8 должны оцениваться по-разному.) Как мне опустить эти строки в этой логике и передать их для оценки по-другому?

Это функция codeigniter, так что мне бы очень хотелось, чтобы кто-нибудь показал мне быстрый, простой, красивый способ сделать это! Большое спасибо!

1 Ответ

1 голос
/ 10 января 2010

Незначительные улучшения могут быть сделаны, но ничего радикального.

  • Простое использование if / else вместо корпуса переключателя может немного улучшить скорость.
  • Определите, какой из случаев будет происходить чаще всего, и разместите его первым, так как это уменьшит количество случаев, которые необходимо выполнить для каждой итерации.
  • Создайте массив любых итераций, которые вы хотите пропустить для простого вызова isset, в отличие от проверки для каждого случая (потребуется несколько операторов if / else)
  • Отслеживать количество итераций для пропуска этих строк

$skip_iterations = array(3 => 1, 5 => 1, 8 => 1);
$arr = $results->row();
$score = 0;
$i = 1;
foreach ($arr as &$a) {
    // skip rows 3, 5, and 8
    if (isset($skip_iterations[$i++])) 
        continue;
    if ($a >= 1 && $a <= 4) {
        $score += 1;
    } else if ($a > 4 && $a < 8) {
        $score += 3;
    } else if ($a > 8) {
        $score += .5;
    }
}
echo $score;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...