2011-03-24 31 views
12

(array)$someemptyvariablethatisnotarray lợi nhuận array([0] =>) thay vì array()PHP - mảng trống

Làm thế nào tôi có thể làm cho nó vì vậy tôi có được một mảng trống rỗng mà không được lặp khi tôi đang sử dụng nó bên trong foreach()?

+3

Khi bạn sử dụng 'var_dump()' thay vì 'print_r()' nó cho thấy bạn cũng có loại giá trị trong mảng! – powtac

Trả lời

18

Các tính năng mà bạn đang sử dụng, được gọi là "casting". Điều này có nghĩa là một biến được buộc phải trở thành một kiểu đã cho, trong ví dụ của bạn là một mảng. Làm thế nào var được chuyển đổi không phải lúc nào cũng rõ ràng trong PHP!

Trong ví dụ $ someemptyvariablethatisnotarray của bạn trở thành một mảng với một mục nhập có giá trị NULL.

Các PHP documentation nói:

Hành vi của một chuyển đổi tự động để mảng hiện đang không xác định.

Để giải quyết mã của bạn Tôi muốn giới thiệu một cái gì đó như thế này:

if (!is_array($someemptyvariablethatisnotarray) { 
    $someemptyvariablethatisnotarray = array(); 
} 
+1

http://www.php.net/manual/en/language.types.array.php#language.types.array.casting –

+2

Nếu bạn gán NULL làm mảng, nó sẽ trở thành một mảng trống, nếu bạn đúc một giá trị vô hướng (ngay cả một chuỗi rỗng, bởi vì đó không phải là NULL) nó sẽ trở thành một mảng với giá trị đó, không phải là một giá trị NULL. –

24
$var = array(); 

sẽ làm trống mảng. Đây là những gì bạn đang sau?

3
$somevar = empty($somevar) ? array() : (array)$somevar; 

Có thể? Mặc dù tôi không chắc tôi có được dàn diễn viên hay mục đích hay không. Chăm sóc để ellaborate hơn một chút (có lẽ một ví dụ về những gì bạn đang cố gắng để thực hiện?)

+0

Tôi đang sử dụng nó như 'foreach ((mảng) $ một cái gì đó như $ k) ...'. Đôi khi $ một cái gì đó có thể là "sai" và không phải là một mảng, vì vậy tôi không muốn foreach để lặp nó – Alex

+0

@ Alexandra: Tôi biết linh hoạt của PHP, nhưng nếu bạn đang tìm biến của bạn chuyển đổi kiểu dữ liệu trên bạn, cần có một kiểm tra ở một nơi khác để nắm bắt điều đó (không dựa vào một diễn viên nói cách khác). Tôi sẽ nhảy súng và giả sử nó là cơ sở dữ liệu liên quan, và một hàng lấy mà có khả năng có thể trả về một FALSE mà sẽ ức chế bạn lặp qua các yếu tố, chính xác? –

+0

yes :) Tôi ghét kiểm tra mọi thứ nhỏ, nhưng tôi đoán tôi không có lựa chọn nào ở đây .. – Alex

3

Hãy thử unset($someemptyvariablethatisnotarray[0]) :)

2

Khi bạn cast một tổ chức phi mảng như một mảng, nó tạo ra một mảng với biến mà là giá trị duy nhất.

Nếu bạn muốn một mảng trống, bạn cần trả lại array().

3

bạn khỏe không?

Tôi tin rằng đây là những gì bạn đang sau:

$something = false; 
foreach((array)(empty($something) ? null : $something) as $k){ 
    echo 'never enters here'; 
} 

Bạn không nhận được một mảng trống rỗng, bởi vì khi bạn thiết lập "(mảng) false", nó có nghĩa là bạn sẽ có một single và phần tử đó sẽ có giá trị "FALSE" được gán cho nó.

Tương tự xảy ra với một chuỗi trống (không phải là rỗng!) (mảng) $ emptystring sẽ trả lại một mảng chứa một phần tử duy nhất, là một chuỗi rỗng!

Tương tự như thực hiện:

array(''); 

Hy vọng nó giúp.

Chúc mừng!

0

chỉ cần sử dụng count(), ví dụ: if(count($array) == 0){ // empty array }

Các vấn đề liên quan