Intereting Posts

count false дает 1, а если пустой массив дает false. Зачем?

У меня есть функция, которая возвращает только одну строку в виде массива.

Я даю запрос как параметр, который точно даст только одну строку.

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'); 

Я думал, что …

  1. если есть ошибка, я могу проверить его, как если (! $ res) // ошибка эха
  2. если он пуст, я могу проверить его как if (! count ($ res)) // нет строк
  3. иначе я предполагаю, что есть строка и продолжить процесс …

НО

  1. когда возвращается ошибка false. В if (count ($ ret)) дает 1.
  2. Если ($ ret) условия терпят неудачу (дает false), если я возвращаю как пустой массив.

//

 $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'); 

Solutions Collecting From Web of "count false дает 1, а если пустой массив дает false. Зачем?"

«почему 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; }