Предупреждение: 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;
}
Author: Community, 2011-08-31

3 answers

Вы должны использовать count(), чтобы получить размер массива:

if (!is_array($arr) || !$arr || count($arr)==0)  return 0;
 4
Author: Tom Knapen, 2011-08-31 15:14:10

Вам нужно использовать 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;
}
 6
Author: DaveRandom, 2011-08-31 15:29:37

Если вы хотите проверить наличие пустого массива, вам нужно count(), а не strlen, что действительно для строк.

 1
Author: jeroen, 2011-08-31 15:14:49