2016-09-12 6 views
-1

У меня есть форма, которая в конечном итоге я бы хотел рассчитать процентный балл от представленных значений. Проблема заключается в том, что некоторые ответы могут быть помечены как n/a, поэтому мне нужно уметь вычислять только общее количество полей с данными (0 для отказа, 1 для прохода). Я использовал пустую строку для ответов n/a, как в приведенном ниже коде. Я новичок в php, поэтому было интересно, как лучше всего это сделать. Есть ли способ подсчитать количество пустых строк, представленных или, возможно, подсчитать только общее количество переданных строк, содержащих данные?Как подсчитать количество пустых строк в массиве

<label> 
    <input type="radio" name="item1" value="">N/A 
</label> 
<label> 
    <input type="radio" name="item1" value="0">Fail 
</label> 
<label> 
    <input type="radio" name="item1" value="1">Pass 
</label> 
+0

Итерации через все входы. Либо удалите те, у которых значение '' '' из существующего массива, либо добавьте другие в новый массив. Затем подсчитывайте и суммируйте. –

+0

Возможный дубликат [Удалить пустые элементы массива] (http://stackoverflow.com/questions/3654295/remove-empty-array-elements) – Sherif

+0

Спасибо, Шериф, который указал мне в правильном направлении, и теперь у меня есть работа. – misterpauly

ответ

1

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

$filtered = array_filter($original, function($el) { 
    // check for empty strings as 0 for example is a valid value 
    return $el !== ''; 
}); 
var_dump(count($original) - count($filtered)); 

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

+0

Спасибо, jeroen, теперь у меня это работает. Я попробовал это с вашим кодом, но он продолжал возвращать результат 0. Я все еще новичок в этом, поэтому я, вероятно, не следовал ему правильно. Код, который я получил, чтобы работать ниже, очень похож. '$ score = array ($ _ POST ['item1'], $ _POST ['item2'], $ _POST ['item 3']); $ potential_score = sizeof (array_filter ($ score, function ($ value) {return $ value! == '';})); print_r ($ potential_score); ' – misterpauly

0

обязательно - при отправке формы вы можете обработать массив $_POST - в этом примере с помощью array_filter с пользовательским обратным вызовом.

function countempty($value){ 
    /*return empty($value);*/ 
    return $value==''; 
} 

$empty=count(array_filter($_POST, 'countempty')); 
echo 'Empty: '.$empty; 
+0

Нет, это также удалит значения' 0'/'Fail' из примера OP. – jeroen

+0

хорошая точка - я забыл, что нуль приравнивается к пустым ... – RamRaider

Смежные вопросы