2011-08-31 16 views
5

thể trùng lặp:
mysql_fetch_array() expects parameter 1 to be resource, boolean given in selectCảnh báo: strlen() dự kiến ​​tham số 1 là chuỗi, mảng cho

Tôi di chuyển trang web của tôi đến một máy chủ mới. Phiên bản php trước đó là 5.2 và bây giờ là 5.3. Sau khi tôi đã thay đổi phiên bản php, nó cho thấy những cảnh báo gần như tất cả các trang:

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

Dòng lỗi là dòng thứ ba trong hàm này:

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

bạn nên cân nhắc thay thế 'chút foreach' với [ 'implode ("", $ arr);'] (http://uk2.php.net/manual/en/function.implode.php) – fbstj

+0

Tôi không hiểu tại sao một người nào đó sẽ downvote câu hỏi này chỉ vì đó là một lỗi mới bắt đầu. – cypher

+0

@cypher đã đồng ý, một số người hơi quá buồn cười ... – DaveRandom

Trả lời

3

Bạn nên sử dụng count() để có được kích thước của một mảng:

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

Nếu bạn muốn kiểm tra cho một mảng trống rỗng, bạn cần count(), không strlen mà thực sự là cho chuỗi.

6

Bạn cần sử dụng count() thay vì strlen() để nhận số lượng phần tử trong một mảng.

Tuy nhiên, bạn không cần gì cả. Một mảng trống sẽ đánh giá là FALSE sớm hơn số này (!$arr) để kiểm tra này là không cần thiết.

Đây là cách tôi sẽ viết hàm của bạn (sửa):

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

Chỉ khi giá trị '$ arr' không phải là một mảng mà còn giữ giá trị đánh giá là' TRUE'. PHP ngừng thực thi mã trong chuỗi 'OR' ngay khi một trong các mệnh đề đánh giá thành' FALSE'. Đây là một tính năng rất hữu ích mà tôi sử dụng rất nhiều ... Và bạn đã xóa bình luận của bạn ... – DaveRandom

+0

+1 đẹp, tôi thậm chí không đọc phần còn lại ... – jeroen

+0

@DaveRandom: Tôi nhận ra bạn là ai nói. Nhưng trong bình luận của bạn, PHP dừng đánh giá một chuỗi OR khi một trong các mệnh đề được đánh giá là đúng, không sai. – animuson