Php làm cho mảng trống

Vì mảng tôi đang trả về được khai báo trong một loạt các câu lệnh if, nên tôi cần trả về một mảng trống nếu tất cả các câu lệnh if được đánh giá là sai. Đây có phải là một cách chính xác để làm điều đó?

if (isset($arr))
  return $arr;
else 
  return array();

đã hỏi ngày 11 tháng 12 năm 2012 lúc 1. 24

Tôi khuyên bạn nên khai báo

if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
0 ở đầu hàm để bạn không phải lo lắng về điều đó

Nếu bạn đang kiểm tra ngay trước khi quay lại, tôi không khuyên bạn nên

if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
1. Cách bạn đang sử dụng
if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
2 phụ thuộc vào một mảng được trả về. Ví dụ, nếu
if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
3 được đặt thành một số, thì nó vẫn sẽ hợp lệ. Bạn cũng nên kiểm tra
if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
4. Ví dụ

if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();

Hoặc trong một dòng thay thế

return (isset($arr) && is_array($arr)) ? $arr : array();

Nhưng, như tôi đã nói, tôi khuyên bạn nên khai báo mảng ở trên cùng thay vào đó. Nó dễ dàng hơn và bạn sẽ không phải lo lắng về nó

đã trả lời 11 tháng 12 năm 2012 lúc 1. 27

cegfault cegfault

6.3193 huy hiệu vàng25 huy hiệu bạc49 huy hiệu đồng

1

Để tránh phức tạp, Đơn giản chỉ cần

________số 8

đã trả lời 3 tháng 3 năm 2019 lúc 14. 12

Jasbir Rana Jasbir Rana

2413 huy hiệu bạc10 huy hiệu đồng

Mảng array trong PHP thực chất là một bản đồ có thứ tự. Bản đồ là một loại liên kết các giá trị với các khóa. Loại này được tối ưu hóa cho một số mục đích sử dụng khác nhau; . Vì các giá trị của mảng có thể là mảng khác, cây và đa chiều arrays are also possible.

Giải thích về các cấu trúc dữ liệu đó nằm ngoài phạm vi của sách hướng dẫn này, nhưng ít nhất một ví dụ được cung cấp cho mỗi cấu trúc đó. Để biết thêm thông tin, hãy xem tài liệu đáng kể tồn tại về chủ đề rộng lớn này

cú pháp

Chỉ định với array()

Có thể tạo một mảng bằng cách sử dụng array() language construct. It takes any number of comma-separated

if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
5 pairs as arguments.

if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
0

Dấu phẩy sau phần tử mảng cuối cùng là tùy chọn và có thể bỏ qua. Điều này thường được thực hiện cho các mảng một dòng, tôi. e.

if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
6 được ưu tiên hơn
if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
7. Mặt khác, đối với các mảng nhiều dòng, dấu phẩy ở cuối thường được sử dụng, vì nó cho phép dễ dàng thêm các phần tử mới vào cuối

Ghi chú

Có một cú pháp mảng ngắn thay thế

if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
8 bằng
if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
9

Ví dụ #1 Một mảng đơn giản

return (isset($arr) && is_array($arr)) ? $arr : array();
0

Khóa key có thể là int hoặc a . string. The giá trị có thể thuộc bất kỳ loại nào.

Ngoài ra, phím sau sẽ diễn ra.

  • Chuỗi s chứa số thập phân hợp lệ int s, trừ khi số đó đứng trước dấu
    return (isset($arr) && is_array($arr)) ? $arr : array();
    
    1, . e. g. khóa
    return (isset($arr) && is_array($arr)) ? $arr : array();
    
    2 sẽ thực sự được lưu trữ trong
    return (isset($arr) && is_array($arr)) ? $arr : array();
    
    3. Mặt khác,
    return (isset($arr) && is_array($arr)) ? $arr : array();
    
    4 sẽ không được truyền, vì nó không phải là số nguyên thập phân hợp lệ. int type. E.g. the key
    return (isset($arr) && is_array($arr)) ? $arr : array();
    
    2 will actually be stored under
    return (isset($arr) && is_array($arr)) ? $arr : array();
    
    3. On the other hand
    return (isset($arr) && is_array($arr)) ? $arr : array();
    
    4 will not be cast, as it isn't a valid decimal integer.
  • Float s cũng được chuyển thành int s, nghĩa là phần phân số sẽ bị cắt bớt. e. g. khóa
    return (isset($arr) && is_array($arr)) ? $arr : array();
    
    5 sẽ thực sự được lưu trữ trong
    return (isset($arr) && is_array($arr)) ? $arr : array();
    
    3.
  • Bool s cũng được chuyển thành int s, tôi. e. khóa
    return (isset($arr) && is_array($arr)) ? $arr : array();
    
    7 sẽ thực sự được lưu trữ dưới
    return (isset($arr) && is_array($arr)) ? $arr : array();
    
    8 và khóa
    return (isset($arr) && is_array($arr)) ? $arr : array();
    
    9 dưới
    return [];
    
    0.
  • Null sẽ được chuyển thành chuỗi rỗng, i. e. khóa
    return [];
    
    1 sẽ thực sự được lưu trữ trong
    return [];
    
    2.
  • Mảng s và đối tượng s làm khóa. Làm như vậy sẽ dẫn đến một cảnh báo.
    return [];
    
    3.

Nếu nhiều phần tử trong khai báo mảng sử dụng cùng một khóa, thì chỉ phần tử cuối cùng sẽ được sử dụng vì tất cả các phần tử khác đều bị ghi đè

Ví dụ #2 Ví dụ về truyền và ghi đè loại

return [];
4

Ví dụ trên sẽ xuất ra

if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
0

Vì tất cả các khóa trong ví dụ trên được chuyển thành

return (isset($arr) && is_array($arr)) ? $arr : array();
8, giá trị sẽ được ghi đè trên mọi phần tử mới và giá trị được gán cuối cùng
return [];
6 là giá trị duy nhất còn lại

Mảng PHP có thể chứa các khóa intchuỗi tại .

Ví dụ #3 Hỗn hợp khóa intchuỗi <

return [];
7

Ví dụ trên sẽ xuất ra

if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
4

Khóa key là tùy chọn. Nếu nó không được chỉ định, PHP sẽ sử dụng phần tăng của khóa int lớn nhất đã sử dụng trước đó.

Ví dụ #4 Các mảng được lập chỉ mục không có khóa

return [];
8

Ví dụ trên sẽ xuất ra

if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
6

Có thể chỉ định khóa cho một số phần tử và bỏ nó cho những phần tử khác

Ví dụ #5 Phím không có trên tất cả các phần tử

return [];
9

Ví dụ trên sẽ xuất ra

if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
8

Như bạn có thể thấy giá trị cuối cùng

return [];
6 đã được gán khóa
if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
01. Điều này là do khóa số nguyên lớn nhất trước đó là
if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
02

Ví dụ #6 Ví dụ về ghi đè và truyền kiểu phức tạp

Ví dụ này bao gồm tất cả các biến thể của kiểu truyền khóa và ghi đè các phần tử

if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
03

Ví dụ trên sẽ xuất ra

if (isset($arr))
  return $arr;
else 
  return array();
0

Truy cập các phần tử mảng bằng cú pháp dấu ngoặc vuông

Các phần tử mảng có thể được truy cập bằng cú pháp

if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
04

Ví dụ #7 Truy cập các phần tử mảng

if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
05

Ví dụ trên sẽ xuất ra

if (isset($arr))
  return $arr;
else 
  return array();
1

Ghi chú

Trước PHP 8. 0. 0, dấu ngoặc vuông và dấu ngoặc nhọn có thể được sử dụng thay thế cho nhau để truy cập các phần tử mảng (e. g.

if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
06 và
if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
07 đều sẽ làm điều tương tự trong ví dụ trên). Cú pháp dấu ngoặc nhọn không được dùng nữa kể từ PHP 7. 4. 0 và không còn được hỗ trợ kể từ PHP 8. 0. 0

Ví dụ #8 Hội thảo mảng

if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
08

Ghi chú

Cố gắng truy cập một khóa mảng chưa được xác định cũng giống như truy cập bất kỳ biến chưa xác định nào khác. một thông báo lỗi cấp độ

if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
09 (cấp độ ____300 trước PHP 8. 0. 0) sẽ được cấp và kết quả sẽ là
return [];
1

Ghi chú

Hủy bỏ hội thảo mảng một giá trị vô hướng không phải là chuỗi mang lại kết quả là

return [];
1. Trước PHP 7. 4. 0, điều đó không đưa ra thông báo lỗi. Kể từ PHP 7. 4. 0, vấn đề này
if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
00; . 0. 0, vấn đề này
if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
09.

Tạo/sửa đổi với cú pháp dấu ngoặc vuông

Mảng hiện có có thể được sửa đổi bằng cách đặt rõ ràng các giá trị trong đó.

Điều này được thực hiện bằng cách gán các giá trị cho mảng , chỉ định khóa trong ngoặc đơn. Khóa cũng có thể được bỏ qua, dẫn đến một cặp dấu ngoặc trống (

if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
9).

if (isset($arr))
  return $arr;
else 
  return array();
2

Nếu $arr chưa tồn tại hoặc được đặt thành

return [];
1 hoặc
return (isset($arr) && is_array($arr)) ? $arr : array();
9, nó sẽ được tạo, vì vậy đây cũng là một cách khác để tạo mảng. This practice is however discouraged because if $arr already contains some value (e.g. chuỗi từ biến yêu cầu) thì giá trị này sẽ giữ nguyên vị trí và
if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
9 thực sự có thể đại diện cho toán tử truy cập chuỗi. Tốt hơn hết là khởi tạo một biến bằng cách gán trực tiếp.

Ghi chú. Kể từ PHP 7. 1. 0, áp dụng toán tử chỉ mục trống trên chuỗi sẽ gây ra lỗi nghiêm trọng. Trước đây, chuỗi được chuyển đổi âm thầm thành một mảng.

Ghi chú. Kể từ PHP 8. 1. 0, việc tạo một mảng mới từ giá trị

return (isset($arr) && is_array($arr)) ? $arr : array();
9 không được dùng nữa. Tạo một mảng mới từ
return [];
1 và các giá trị không xác định vẫn được phép.

Để thay đổi một giá trị nhất định, hãy gán giá trị mới cho phần tử đó bằng khóa của nó. Để xóa một cặp khóa/giá trị, hãy gọi hàm unset() trên đó.

if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
41

Ghi chú

Như đã đề cập ở trên, nếu không có khóa nào được chỉ định, thì tối đa các chỉ số int hiện có sẽ được sử dụng và khóa mới sẽ là khóa đó . Nếu chưa có int chỉ số nào tồn tại, khóa sẽ là

return [];
0 (không).

Lưu ý rằng khóa số nguyên tối đa được sử dụng cho việc này hiện không cần tồn tại trong mảng . Nó chỉ cần tồn tại trong mảng tại một thời điểm nào đó kể từ lần cuối cùng mảng was re-indexed. The following example illustrates:

if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
43

Ví dụ trên sẽ xuất ra

if (isset($arr))
  return $arr;
else 
  return array();
3

Phá hủy mảng

Mảng có thể được hủy cấu trúc bằng cách sử dụng

if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
9 (kể từ PHP 7. 1. 0) hoặc list() cấu trúc ngôn ngữ. Các cấu trúc này có thể được sử dụng để hủy cấu trúc một mảng thành các biến riêng biệt.

if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
45

if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
46

if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
47

Phá hủy mảng có thể được sử dụng trong foreach để hủy cấu trúc một mảng đa chiều trong khi lặp lại nó

if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
48

if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
49

if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
60

Các phần tử của mảng sẽ bị bỏ qua nếu không cung cấp biến. Quá trình phá hủy mảng luôn bắt đầu tại chỉ mục

return [];
0

if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
62

if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
63

if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
64

Kể từ PHP 7. 1. 0, mảng kết hợp cũng có thể bị hủy cấu trúc. Điều này cũng cho phép dễ dàng lựa chọn đúng phần tử trong các mảng được lập chỉ mục bằng số vì chỉ mục có thể được chỉ định rõ ràng

if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
65

if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
63

if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
67

Phá hủy mảng có thể được sử dụng để dễ dàng hoán đổi hai biến

if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
68

if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
46

if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
80

Ghi chú

Toán tử trải rộng (

if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
81) không được hỗ trợ trong các bài tập

Ghi chú

Cố gắng truy cập một khóa mảng chưa được xác định cũng giống như truy cập bất kỳ biến chưa xác định nào khác. một thông báo lỗi cấp độ

if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
09 (cấp độ ____300 trước PHP 8. 0. 0) sẽ được cấp và kết quả sẽ là
return [];
1

chức năng hữu ích

Có khá nhiều hàm hữu ích để làm việc với mảng. Xem phần hàm mảng

Ghi chú

Hàm unset() cho phép xóa khóa khỏi mảng. Be aware that the array will not be reindexed. If a true "remove and shift" behavior is desired, the mảng có thể được lập chỉ mục lại bằng cách sử dụng array_values()< . function.

if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
85

Cấu trúc điều khiển foreach tồn tại riêng cho mảng s. Nó cung cấp một cách dễ dàng để duyệt qua một mảng .

Mảng nên và không nên

Tại sao
if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
86 sai?

Luôn sử dụng dấu ngoặc kép xung quanh chỉ mục mảng chuỗi ký tự. Ví dụ:

if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
87 đúng, trong khi
if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
86 thì không. Nhưng tại sao?

if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
89

Điều này là sai, nhưng nó hoạt động. Lý do là mã này có một hằng số không xác định (

if (isset($arr))
  return $arr;
else 
  return array();
00) chứ không phải là một chuỗi (
if (isset($arr))
  return $arr;
else 
  return array();
01 - chú ý các dấu ngoặc kép). Nó hoạt động vì PHP tự động chuyển đổi một chuỗi trống (một chuỗi không tương ứng với bất kỳ ký hiệu đã biết nào) thành một string which contains the bare string. For instance, if there is no defined constant named
if (isset($arr))
  return $arr;
else 
  return array();
00, then PHP will substitute in the chuỗi
if (isset($arr))
  return $arr;
else 
  return array();
01 và sử dụng hằng số đó.

Cảnh báo

Dự phòng để xử lý hằng số không xác định dưới dạng chuỗi trống gây ra lỗi cấp độ

if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
00. Điều này đã không được chấp nhận kể từ PHP 7. 2. 0 và đưa ra lỗi cấp độ
if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
09. Kể từ PHP 8. 0. 0, nó đã bị xóa và đưa ra một Lỗi ngoại lệ.

Ghi chú. Điều này không có nghĩa là luôn trích dẫn khóa. Không trích dẫn các khóa là hằng số hoặc biến, vì điều này sẽ ngăn PHP diễn giải chúng.

if (isset($arr))
  return $arr;
else 
  return array();
06

Ví dụ trên sẽ xuất ra

if (isset($arr))
  return $arr;
else 
  return array();
4

Thêm ví dụ để chứng minh hành vi này

if (isset($arr))
  return $arr;
else 
  return array();
07

if (isset($arr))
  return $arr;
else 
  return array();
08

if (isset($arr))
  return $arr;
else 
  return array();
09

Khi error_reporting được đặt để hiển thị các lỗi ở cấp độ

if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
00 (ví dụ: bằng cách đặt thành
if (isset($arr))
  return $arr;
else 
  return array();
11), những cách sử dụng đó sẽ hiển thị ngay lập tức. Theo mặc định, error_reporting được đặt để không hiển thị thông báo

Như đã nêu trong phần cú pháp, nội dung bên trong dấu ngoặc vuông ('

if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
46' và '
if (isset($arr))
  return $arr;
else 
  return array();
13') phải là một biểu thức. Điều này có nghĩa là mã như thế này hoạt động

if (isset($arr))
  return $arr;
else 
  return array();
14

Đây là một ví dụ về việc sử dụng giá trị trả về của hàm làm chỉ mục mảng. PHP cũng biết về hằng số

if (isset($arr))
  return $arr;
else 
  return array();
15

Lưu ý rằng

if (isset($arr))
  return $arr;
else 
  return array();
16 cũng là một mã định danh hợp lệ, giống như
if (isset($arr))
  return $arr;
else 
  return array();
00 trong ví dụ đầu tiên. Nhưng ví dụ cuối cùng trên thực tế cũng giống như cách viết

if (isset($arr))
  return $arr;
else 
  return array();
18

bởi vì

if (isset($arr))
  return $arr;
else 
  return array();
16 bằng
return (isset($arr) && is_array($arr)) ? $arr : array();
8, v.v.

Vậy tại sao nó lại xấu?

Tại một thời điểm nào đó trong tương lai, nhóm PHP có thể muốn thêm một hằng số hoặc từ khóa khác hoặc một hằng số trong mã khác có thể gây trở ngại. Ví dụ: sử dụng các từ

if (isset($arr))
  return $arr;
else 
  return array();
21 và
if (isset($arr))
  return $arr;
else 
  return array();
22 theo cách này là sai vì chúng là các từ khóa dành riêng

Ghi chú. Xin nhắc lại, bên trong một chuỗi có dấu ngoặc kép, việc không bao quanh các chỉ mục mảng bằng dấu ngoặc kép là hợp lệ để

if (isset($arr))
  return $arr;
else 
  return array();
23 hợp lệ. Xem các ví dụ trên để biết chi tiết về lý do tại sao cũng như phần phân tích cú pháp biến trong chuỗi.

Chuyển đổi thành mảng

Đối với bất kỳ loại int , float , . Nói cách khác,

if (isset($arr))
  return $arr;
else 
  return array();
24 hoàn toàn giống với
if (isset($arr))
  return $arr;
else 
  return array();
25. string, bool and resource, converting a value to an array results in an array with a single element with index zero and the value of the scalar which was converted. In other words,
if (isset($arr))
  return $arr;
else 
  return array();
24 is exactly the same as
if (isset($arr))
  return $arr;
else 
  return array();
25.

Nếu một đối tượng được chuyển đổi thành một mảng , . Các khóa là tên biến thành viên, với một vài ngoại lệ đáng chú ý. thuộc tính số nguyên không thể truy cập được; . Các giá trị được thêm vào trước này có các byte

if (isset($arr))
  return $arr;
else 
  return array();
26 ở hai bên. Các thuộc tính đã nhập chưa được khởi tạo sẽ bị loại bỏ một cách âm thầm. array whose elements are the object's properties. The keys are the member variable names, with a few notable exceptions: integer properties are unaccessible; private variables have the class name prepended to the variable name; protected variables have a '*' prepended to the variable name. These prepended values have
if (isset($arr))
  return $arr;
else 
  return array();
26 bytes on either side. Uninitialized typed properties are silently discarded.

if (isset($arr))
  return $arr;
else 
  return array();
27

Ví dụ trên sẽ xuất ra

if (isset($arr))
  return $arr;
else 
  return array();
5

Những

if (isset($arr))
  return $arr;
else 
  return array();
26 này có thể dẫn đến một số hành vi không mong muốn

if (isset($arr))
  return $arr;
else 
  return array();
29

if (isset($arr))
  return $arr;
else 
  return array();
30

if (isset($arr))
  return $arr;
else 
  return array();
31

Ví dụ trên sẽ xuất ra

if (isset($arr))
  return $arr;
else 
  return array();
6

Ở trên dường như có hai khóa có tên 'AA', mặc dù một trong số chúng thực sự có tên '\0A\0A'

Chuyển đổi

return [];
1 thành một mảng dẫn đến một mảng.

Giải nén mảng

Một mảng có tiền tố là

if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
81 sẽ được mở rộng tại chỗ trong quá trình định nghĩa mảng. Chỉ có thể mở rộng các mảng và đối tượng triển khai Traversable . Giải nén mảng với
if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
81 có sẵn kể từ PHP 7. 4. 0.

Có thể mở rộng nhiều lần và thêm các phần tử thông thường vào trước hoặc sau toán tử

if (isset($arr) && is_array($arr))
    return $arr;
else 
    return array();
81