2011-08-31 10 views
5

Duplicar posible:
mysql_fetch_array() expects parameter 1 to be resource, boolean given in selectAdvertencia: strlen() espera parámetro de 1 a ser de cadena, matriz dada

I' mover mi sitio web a un nuevo huésped. La versión anterior de php era 5.2 y ahora es 5.3. Después de haber cambiado la versión de php, muestra la advertencia casi todas las páginas:

strlen() expects parameter 1 to be string, array given 

La línea de error es la tercera línea en esta función:

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; 
} 
+1

usted debe considerar la sustitución de la 'poco foreach' con un [implosión '("", $ arr);'] (http://uk2.php.net/manual/en/function.implode.php) – fbstj

+0

No entiendo por qué alguien desestimó esta pregunta solo porque es un error de principiante. – cypher

+0

@cypher estuvo de acuerdo, algunas personas son un poco demasiado despreocupadas ... – DaveRandom

Respuesta

3

Debe utilizar count() para obtener el tamaño de una matriz:

if (!is_array($arr) || !$arr || count($arr)==0) return 0; 
1

Si desea comprobar si hay una matriz vacía, es necesario count(), no strlen que es de hecho para las cadenas.

6

Necesita usar count() en lugar de strlen() para obtener la cantidad de elementos en una matriz.

Sin embargo, no necesita nada en absoluto. Un conjunto vacío evaluará a FALSE anterior a esto (!$arr) por lo que esta verificación es innecesaria.

Esta es la forma en que iba a escribir su función (editado ):

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; 
} 
+0

Solo cuando el valor de '$ arr' no es una matriz, pero sí tiene un valor que se evalúa como' VERDADERO'. PHP detiene la ejecución del código en una cadena 'O 'tan pronto como una de las cláusulas evalúa' FALSO'. Esta es una característica muy útil que uso mucho ... Y borraste tu comentario ... – DaveRandom

+0

+1 buena, ni siquiera leí el resto ... – jeroen

+0

@DaveRandom: me di cuenta de lo que eras diciendo. Pero en su comentario, PHP deja de evaluar una cadena OR cuando una de las cláusulas se evalúa como verdadera, no falsa. – animuson

Cuestiones relacionadas