2011-08-31 11 views
5

Powiel możliwe:
mysql_fetch_array() expects parameter 1 to be resource, boolean given in selectOstrzeżenie: strlen() oczekuje parametr 1 za łańcuch, tablica podane

I”porusza moją stronę do nowego gospodarza. Poprzednia wersja php miała 5.2, a teraz 5.3. Po Zmieniłem wersję php, pokazuje ostrzeżenie prawie każdą stronę:

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

Linia błędu jest trzecia linia w tej funkcji:

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

należy rozważyć zastąpienie 'foreach' trochę z [' implode ("", $ arr); '] (http://uk2.php.net/manual/en/function.implode.php) – fbstj

+0

Nie rozumiem, dlaczego ktoś mógłby zgodzić się na to pytanie tylko dlatego, że jest to błąd początkujący. – cypher

+0

@ciper zgodził się, niektórzy ludzie są nieco zbyt pochlebni ... – DaveRandom

Odpowiedz

3

Należy użyć count(), aby uzyskać wielkość tablicy:

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

Jeśli chcesz sprawdzić dla pustej tablicy, trzeba count() nie strlen który jest rzeczywiście dla ciągów.

6

Musisz użyć count() zamiast strlen(), aby uzyskać liczbę elementów w tablicy.

Jednak nie potrzebujesz niczego. Pusta tablica zostanie wcześniej przetestowana na FALSE, więc ta kontrola nie jest konieczna.

ten sposób chciałbym napisać swoją funkcję (edytowany):

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

Tylko wtedy, gdy wartość '$ arr' nie jest tablicą, ale zawiera wartość, która ma wartość" TRUE ". PHP przestaje wykonywać kod w łańcuchu "OR", gdy tylko jedna z klauzul zwróci wartość "FALSE". Jest to bardzo przydatna funkcja, której bardzo często używam ... I skasowałeś swój komentarz ... – DaveRandom

+0

+1 piękny, nie przeczytałem nawet reszty ... – jeroen

+0

@DaveRandom: Zrozumiałem, kim jesteś powiedzenie. Ale w twoim komentarzu PHP przestaje oceniać łańcuch OR, gdy jedna z klauzul jest prawdziwa, a nie fałszywa. – animuson