Здравствуйте, подскажите как, убрать данное предупреждение? установлен php72-7.2.23 Или же, что нужно сделоть что бы оно не отображалось на веб странице? Код (Text): Warning: count(): Parameter must be an array or an object that implements Countable in /usr/local/www/utm-cabinet/library/Zend/Db/Table/Abstract.php on line 1309 PHP: $whereList = array(); $numberTerms = 0; foreach ($args as $keyPosition => $keyValues) { //print_r($keyPosition); // if (is_iterable($keyValues)){ Ошибка в данной линии 1309---> $keyValuesCount = count($keyValues); //} //print_r($keyValues); // Coerce the values to an array. // Don't simply typecast to array, because the values // might be Zend_Db_Expr objects. if (!is_array($keyValues)) { $keyValues = array($keyValues); // print_r($keyValues); } if ($numberTerms == 0) { $numberTerms = $keyValuesCount; } else if ($keyValuesCount != $numberTerms) { require_once 'Zend/Db/Table/Exception.php'; throw new Zend_Db_Table_Exception("Missing value(s) for the primary key"); } $keyValues = array_values($keyValues); for ($i = 0; $i < $keyValuesCount; ++$i) { if (!isset($whereList[$i])) { $whereList[$i] = array(); } $whereList[$i][$keyPosition] = $keyValues[$i]; // print_r($i); } } $whereClause = null;
Эта часть вашего кода означает, что элементы массива $args, обрабатываемые в цикле, разбираются на ключ и его значение. Каждое значение считается массивом и к нему применяется функция count(). PHP сообщает вам, что значения не являются массивом. Проблема в массиве $args
Вот полный код, т.е $args можно удалить? PHP: public function find() { $this->_setupPrimaryKey(); $args = func_get_args(); $keyNames = array_values((array) $this->_primary); if (count($args) < count($keyNames)) { require_once 'Zend/Db/Table/Exception.php'; throw new Zend_Db_Table_Exception("Too few columns for the primary key"); } if (count($args) > count($keyNames)) { require_once 'Zend/Db/Table/Exception.php'; throw new Zend_Db_Table_Exception("Too many columns for the primary key"); } $whereList = array(); $numberTerms = 0; foreach ($args as $keyPosition => $keyValues) { //print_r($keyPosition); // if (is_iterable($keyValues)){ $keyValuesCount = count($keyValues); //} //print_r($keyValues); // Coerce the values to an array. // Don't simply typecast to array, because the values // might be Zend_Db_Expr objects. if (!is_array($keyValues)) { $keyValues = array($keyValues); // print_r($keyValues); } if ($numberTerms == 0) { $numberTerms = $keyValuesCount; } else if ($keyValuesCount != $numberTerms) { require_once 'Zend/Db/Table/Exception.php'; throw new Zend_Db_Table_Exception("Missing value(s) for the primary key"); } $keyValues = array_values($keyValues); for ($i = 0; $i < $keyValuesCount; ++$i) { if (!isset($whereList[$i])) { $whereList[$i] = array(); } $whereList[$i][$keyPosition] = $keyValues[$i]; // print_r($i); } }
Нет, нужно найти откуда он берется, и выяснить почему его структура не соответствует задуманному. Это же ваш код, вам должно быть виднее.
К сожалению это не мой код, помогите разобраться. Получается здесь $args = func_get_args() задается какая то переменая верно?
Не совсем так, речь о том что значение в count() должно быть массивом или реализовывать интерфейс Countable. Вернее сказать не в массиве в переменной. Стоит проверять $keyValues на то что ожидаешь, например так, как было изначально PHP: // if (is_iterable($keyValues)){