2012-04-05 37 views
174

Tôi chỉ cần kiểm tra xem một mảng có nhiều hơn một phần tử hay không. tôi đang cố gắng để làm điều đó theo cách này:Cách nào tốt hơn để kiểm tra xem một mảng có nhiều hơn một phần tử không?

if (isset($arr['1'])) 

theo cách truyền thống khác là

if (sizeof($arr)>1) 

Trong hai là tốt hơn? Trong các situa như vậy, tôi nên đánh giá giữa hai phương pháp thay thế như thế nào? Có đồng hồ đo kiểm hiệu suất nào để đo lường tốt hơn không?

+0

Giả định ở đây là $ arr được xác thực cho một mảng rồi! Điều đó có nghĩa, trước khi nói đến điều này nếu kiểm tra điều kiện, nó đã được kiểm tra nếu một mảng của nó. – tuxnani

+0

http://phparraylength.com/ –

Trả lời

336

Sử dụng này

if (sizeof($arr) > 1) { 
    .... 
} 

Hoặc

if (count($arr) > 1) { 
    .... 
} 

sizeof() là một bí danh cho count(), họ làm việc giống nhau.

Edit: Trả lời phần thứ hai của câu hỏi: Hai dòng mã trong câu hỏi không phải là phương pháp thay thế, họ thực hiện các chức năng khác nhau. Kiểm tra đầu tiên nếu giá trị tại $arr['1'] được đặt, trong khi giá trị thứ hai trả về số phần tử trong mảng.

+8

@NB: Câu hỏi đã được chỉnh sửa, mã ban đầu là 'if (sizeof ($ arr))', được dịch thành 'if (sizeof ($ arr) == 1)' - rõ ràng là doesn ' t kiểm tra xem mảng có ** nhiều hơn một phần tử ** hay không. Câu trả lời này là chính xác, và tôi thấy không có lý do gì để bỏ phiếu, do đó, tôi upvote. –

+2

Tôi thừa nhận rằng tôi không xem xét phiên bản gốc của câu hỏi, câu trả lời này là câu trả lời. Bối cảnh khác nhau và tôi xin lỗi vì đã ghi nhãn câu trả lời là sai. Nó không sai, nếu bạn nhìn vào câu hỏi ban đầu. Nó không tốt cho câu hỏi được chỉnh sửa. –

+0

Đoạn mã thứ hai trong câu hỏi sẽ kiểm tra xem giá trị tại $ arr ['1'] có được đặt hay không, nó không quan tâm đến số đếm. Điều này đã không được giải quyết trong câu trả lời, chỉ nghĩ rằng tôi muốn đề cập đến điều này và hy vọng tác giả của câu trả lời sẽ cập nhật câu trả lời :). –

3

isset() chỉ kiểm tra nếu một biến được đặt .. Đã có gì để làm với kích thước hoặc những gì các mảng chứa

44

if(is_array($arr) && count($arr) > 1)

Chỉ cần chắc chắn rằng $ arr thực sự là một mảng.

sizeof là một bí danh của count, tôi thích sử dụng đếm vì:

  1. 1 ít nhân vật để gõ
  2. sizeof trong nháy mắt nhanh chóng có thể có nghĩa là kích thước của một mảng về bộ nhớ, quá kỹ thuật :(
+0

'is_array' là không cần thiết. –

+0

@AlixAxel hmm, nhưng nếu $ arr là một chuỗi, số ($ arr) sẽ trả về số ký tự của chuỗi đó để ya –

+0

Không, nếu '$ arr' là một chuỗi, nó sẽ trả về' 1'. –

2

tôi giả sử $ arr là một mảng thì đây là những gì bạn đang tìm kiếm

if (sizeof($arr) > 1) ... 
5
if (count($arr) >= 2) 
{ 
    // array has at least 2 elements 
} 

sizeof() là bí danh cho count(). Cả hai đều hoạt động với các mảng không quá, nhưng chúng sẽ chỉ trả về các giá trị lớn hơn 1 nếu đối số là một mảng hoặc một đối tượng Countable, vì vậy bạn khá an toàn với điều này.

5

Rõ ràng sử dụng count($arr) > 1 (sizeof chỉ là bí danh cho count) là giải pháp tốt nhất. Tùy thuộc vào cấu trúc mảng của bạn, có thể có nhiều phần tử nhưng không có phần tử $array['1'].

1

Phương pháp đầu tiên if (isset($arr['1'])) sẽ không hoạt động trên một mảng kết hợp. Ví dụ, mã sau đây hiển thị "Không, không nhiều hơn một."

$arr = array(
    'a' => 'apple', 
    'b' => 'banana', 
); 

if (isset($arr['1'])) { 
    echo "Yup, more than one."; 
} else { 
    echo "Nope, not more than one."; 
} 
6

tôi thích count() chức năng thay vì sizeOf() như sizeOf() chỉ là một bí danh của count() và không có nghĩa giống nhau ở nhiều ngôn ngữ khác. Nhiều lập trình viên mong đợi sizeof() để trả lại lượng bộ nhớ được cấp phát.

+1

Cũng được giải thích ở đây. http://stackoverflow.com/questions/3974385/php-array-count-or-sizeof Điều này rất có giá trị vì câu hỏi này hiện là hit Google hàng đầu cho 'sizeof' so với' count' –

4

Để kiểm tra mảng trống() tốt hơn sizeof().

Nếu mảng chứa nhiều dữ liệu. Nó sẽ mất nhiều thời gian hơn để đếm kích thước của mảng. Nhưng việc kiểm tra sản phẩm nào cũng dễ dàng.

//for empty 
    if(!empty($array)) 
    echo 'Data exist'; 
    else 
    echo 'No data'; 


//for sizeof 
if(sizeof($array)>1) 
     echo 'Data exist'; 
else 
    echo 'No data'; 
Các vấn đề liên quan