Предупреждение: strlen() ожидает, что параметр 1 будет строкой, массив задан [дубликат]
Возможный Дубликат:
mysql_fetch_array() ожидает, что параметр 1 будет ресурсным, логическим, заданным в select
Я перемещаю свой веб-сайт на новый хост. Предыдущая версия php была 5.2, а теперь 5.3. После того, как я изменил версию php, он показывает предупреждение почти на каждой странице:
strlen() expects parameter 1 to be string, array given
Строка ошибки является третьей строкой в этой функции:
function implodestr($arr,$field) {
unset($out_str);
if (!is_array($arr) || !$arr || strlen($arr)==0) return 0; //error line
foreach($arr as $k=>$v) {
$out_str.= $v[$field].",";
}
$str = trim($out_str,",");
$str ? "": $str=0;
return $str;
}
3 answers
Вы должны использовать count(), чтобы получить размер массива:
if (!is_array($arr) || !$arr || count($arr)==0) return 0;
Вам нужно использовать count()
вместо strlen()
, чтобы получить количество элементов в массиве.
Однако вам вообще ничего не нужно. Пустой массив будет вычислен до FALSE
раньше, чем это (!$arr
), поэтому эта проверка не нужна.
Вот как я бы написал вашу функцию ( отредактировано):
function implodestr ($arr, $field) {
// Make sure array is valid and contains some data
if (!$arr || !is_array($arr)) return FALSE;
// Put the data we want into a temporary new array
$out = array();
foreach ($arr as $v) if (isset($v[$field])) $out[] = $v[$field];
// Return the data CSV, or FALSE if there was no valid data
return ($out) ? implode(',',$out) : FALSE;
}
Если вы хотите проверить наличие пустого массива, вам нужно count()
, а не strlen
, что действительно для строк.