Đó là cách tốt hơn để kiểm tra xem một mảng có nhiều hơn một phần tử không?


177

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

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

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

if (sizeof($arr)>1)

Cái nào trong hai cái này tốt hơn? Trong các tình huống như vậy, tôi nên đánh giá như thế nào giữa hai phương pháp thay thế? Có bất kỳ đồng hồ kiểm tra hiệu suất có sẵn để đo cái nào tốt hơn?


Giả định ở đây là $ Array đã được xác thực cho một mảng rồi! Điều đó có nghĩa là, 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 đó là một mảng.
tuxnani

Câu trả lời:


342

Dùng cái này

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

Hoặc là

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

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

Chỉnh sửa: 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ế, chúng 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 được if (sizeof($arr))dịch sang if (sizeof($arr) == 1)- rõ ràng là không 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 đó, upvote của tôi.
Alix Axel

2
Tôi sẽ thừa nhận rằng tôi đã không xem 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 là khác nhau, và tôi xin lỗi vì đã dán nhãn câu trả lời là sai. Điều đó không sai, nếu bạn nhìn vào câu hỏi ban đầu. Thật tệ cho câu hỏi được chỉnh sửa.
NB

Đoạn mã thứ hai trong câu hỏi sẽ kiểm tra xem giá trị tại $ Array ['1'] có được đặt hay không, nó không liên quan đế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 đã đề 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 :).
Anders M.

@AndersM. cảm ơn đã chỉ ra rằng Tôi đã phản ánh nó trong câu trả lời.
Chibuzo

Tôi tặng một cái gì đó như: <pre> <code> cho chỉ mục trong 0 .. <3 {Guard let testTop: Prediciton = topPredictions [index] other {// đối tượng mặc định của bạn} dự đoánResult.append (testTop)} </ code> < / pre> trong swift 4
Alex22

44

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

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

sizeoflà bí danh của count, tôi thích sử dụng tính vì:

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

@AlixAxel hmm, nhưng nếu $ Array là một chuỗi, Count ($ Array) sẽ trả về số ký tự của chuỗi đó vì vậy ya
Andreas Wong

Không, nếu $arrlà một chuỗi, nó sẽ trở lại 1.
Alix Axel

12
Từ hướng dẫn: Trả về số lượng phần tử trong var. Nếu var không phải là một mảng hoặc một đối tượng có giao diện Countable được triển khai, 1 sẽ được trả về. Có một ngoại lệ, nếu var là NULL, 0 sẽ được trả về .
Alix Axel

@AlixAxel oh ok ... wow cảm ơn, không biết rằng: o ... Trong mọi trường hợp tôi sẽ để nó ở đó trong trường hợp OP muốn phân biệt giữa Chuỗi và Mảng (bất kể kích thước) Cảm ơn bạn đã chỉ ra ra đó :)
Andreas Wong

6
if (count($arr) >= 2)
{
  // array has at least 2 elements
}

sizeof()là một bí danh cho count(). Cả hai đều hoạt động với các mảng không, 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 Countableđối tượng , vì vậy bạn khá an toàn với điều này.


6

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



6

Tôi thích các 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 số lượng bộ nhớ được phân bổ.


1
Cũng giải thích ở đây. 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à một hit hàng đầu của Google cho sizeofvscount
Tim Ogilvy

4

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

Nếu mảng chứa lượng dữ liệu khổng lồ. Sẽ mất nhiều thời gian hơn để đếm kích thước của mảng. Nhưng kiểm tra trống luôn 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';

3

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


2

Tôi giả sử $ Array là một mảng thì đây là thứ bạn đang tìm kiếm

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

1

Phương thức đầ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ụ: đoạn mã sau hiển thị "Không, không quá một."

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

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

0

Tôi thực hiện vòng lặp mảng của mình và nhận được mặc định phù hợp trong Swift 4/5

   for index in 0..<3
    {
        let isIndexValid = allObjects.indices.contains(index)
        var yourObject:Class = Class()
        if isIndexValid { yourObject = allObjects[index]}
        resultArray.append(yourObject)
    }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.