Php kiểm tra xem mảng kết hợp có trống không

Không có cách tích hợp nào để kiểm tra xem một mảng có được lập chỉ mục [tuần tự] hoặc liên kết trong PHP hay không, nhưng bạn có thể dễ dàng tạo hàm is_associative[] của riêng mình cho mảng đó

2643 lượt xem

Đã chỉnh sửa. 2021-03-07 10. 02

Đôi khi có thể hữu ích để biết liệu một mảng là kết hợp hay tuần tự [được lập chỉ mục];

Một mảng được lập chỉ mục là một mảng trong đó tất cả các khóa là số nguyên. Để dễ dàng xác định loại mảng mà bạn đang xử lý, bạn có thể lặp qua mảng trong khi kiểm tra xem một phím số có được xác định hay không — ngay khi gặp một giá trị không xác định, bạn có thể giả định một cách an toàn rằng bạn đang xử lý một mảng kết hợp

Ghi chú. rằng những ví dụ này sẽ chỉ hoạt động với mảng một chiều;

Giải pháp

/**
 * Checks if an array is associative. Return value of 'False' indicates a sequential array.
 * @param array $inpt_arr 
 * @return bool 
 */
function is_associative[array $inpt_arr]: bool
{
  // An empty array is in theory a valid associative array
  // so we return 'true' for empty.
  if [[] === $inpt_arr] {
    return true;
  }
  $n = count[$inpt_arr];
  for [$i = 0; $i  'Anna', 'b' => 'Benjamin'];

if [is_associative[$my_array]] {
  echo 'Array is associative';
} else {
  echo 'Array is sequential';
}

đầu ra

Array is associative

Bạn có cần biết kiểu mảng không?

Câu hỏi đặt ra là liệu bạn có thực sự cần biết loại mảng hay không, vì bạn có thể lặp qua mảng, bất kể loại nào, bằng cách sử dụng vòng lặp foreach

foreach [$some_array as $key => $value] {
    echo PHP_EOL . $key . ':' . $value;
}

Hãy nhớ rằng thực sự không có sự khác biệt giữa mảng kết hợp và mảng được lập chỉ mục trong PHP. Bạn thậm chí có thể chọn sử dụng các đối tượng thay vì mảng nếu bạn đang làm việc trong ngữ cảnh OOP, vì các đối tượng có các lợi ích khác và các thuộc tính được hỗ trợ bởi tính năng tự động hoàn thành trong một số trình soạn thảo mã

Trong một số trường hợp, có thể không cần thiết phải kiểm tra xem bạn có đang xử lý một mảng kết hợp hay không, vì một hàm có thể phụ thuộc vào nó để hoạt động bình thường, nhưng trong hầu hết các trường hợp, bạn có thể chỉ cho rằng mảng được định dạng chính xác

Tôi đã gặp một tình huống cụ thể khi tập lệnh PHP đang tạo đối tượng JSON cho JavaScript ở giao diện người dùng. Tập lệnh này đang mong đợi một đối tượng JSON với các chuỗi là tên thuộc tính — không khó để hiểu tại sao nó bị hỏng khi tôi cung cấp cho nó một đối tượng JSON được lập chỉ mục thay thế. Để giải quyết vấn đề này, tôi quyết định tạo nó dưới dạng một mảng kết hợp trong PHP trước khi đưa nó vào json_encode

So sánh mảng với một mảng phạm vi

Bạn cũng có thể sử dụng kết hợp array_keys và range;

function is_associative[array $inpt_arr]
{
  if [[] === $inpt_arr] {
    return true;
  }

  if[array_keys[$inpt_arr] !== range[0, count[$inpt_arr] - 1]] {
    return true;
  }
  // Dealing with a Sequential array
  return false;
}

Hiệu suất

Tất nhiên, hiệu suất có thể không phải là mối quan tâm đầu tiên của bạn với các thuật toán đơn giản này, tuy nhiên, nó vẫn đáng được nhắc đến

Tùy thuộc vào kích thước của mảng và hệ thống của bạn, bạn có thể thực hiện nhiều hơn hoặc ít hơn vài triệu kiểm tra này trong một giây. Để tiến hành kiểm tra điểm chuẩn của các ví dụ này, bạn có thể thử đoạn mã dưới đây

$names_array = ['Brian', 'Freddy', 'Gina', 'Johannes', 'Kim'];

$start_time = microtime[true];

for [$x = 0; $x 

Chủ Đề