У меня есть функция, которая возвращает только одну строку в виде массива.
Я даю запрос как параметр, который точно даст только одну строку.
function getFields($query) { $t =& get_instance(); $ret = $t->db->query($query); if(!$ret)return false; else if(!$ret->num_rows()) return array(); else return $ret->row_array(); } $ret = getFields('query string');
Я думал, что …
НО
//
$ret = getFields('query string'); if(!$fes)jerror('status,0,msg,dberror'); if(!count($fes))jerror('status,1,msg,no rows'); // continue execution when there atleast one row.
этот код вызывается с помощью ajax. поэтому я возвращаю ответ json.
почему count дает 1, а пустой массив – false.
я просто хотел закодировать логические условия, а не давать больше условий отношений. просто для уменьшения кода.
Где я могу получить все эти вещи BUGGING php, чтобы я мог убедиться, что не должен заканчивать логические ошибки, как выше.
ОШИБКА – в приведенном выше предложении я не упоминал об ошибке, но все насчет ошибок. что делает нас логическими ошибками.
Я отредактировал этот следующий код, чтобы включить следующее, между тем я получил это как ответ https://stackoverflow.com/users/451672/andrew-dunn
я могу сделать это так, но все же я хочу знать, почему для приведенного выше объяснения
if($fes===false)jerror(); if(!$fes)jsuccess('status,4');
«почему count дает 1» – см. http://docs.php.net/count :
Если var не является массивом […] 1, он будет возвращен.
"и если пустой массив дает false." – см. http://docs.php.net/language.types.boolean#language.types.boolean.casting :
При преобразовании в boolean следующие значения считаются FALSE:
[…]
- массив с нулевыми элементами
Почему бы вам просто не проверить, сначала ли $ret === false
?
Если $myVariable
не является массивом, но пустым, тогда
$count = count($myVariable);
дает 1
.
Для этой ситуации я проверяю, является ли переменная «array» или «bool (false)». Если output is array, я использую count, если это не массив, я установил число в ноль.
if (is_array($myVariable)) { $count = count($myVariable); } else { $count = 0; }