Bài viết này sẽ hướng dẫn bạn cách chuyển đổi mảng thành đối tượng với các điều kiện khác nhau của mảng trong PHP
Chuyển đổi mảng thành đối tượng bằng json
Cách tốt nhất, nhanh chóng, bẩn thỉu, rất hiệu quả và dễ dàng [cũng là đề xuất cá nhân của tôi] để chuyển đổi mảng thành đối tượng bằng cách sử dụng json_encode và json_decode, nó sẽ biến toàn bộ mảng [bao gồm cả các phần tử phụ của mảng] thành một đối tượng
Mảng kết hợp là đối tượng động mà người dùng xác định lại khi cần. Khi bạn gán giá trị cho khóa trong một biến kiểu Mảng, mảng được chuyển đổi thành đối tượng và nó mất các thuộc tính và phương thức của Mảng. Thuộc tính độ dài không có tác dụng vì biến không còn thuộc kiểu Array
Chúng tôi sẽ chứng minh tất cả những điều đó và cũng chỉ ra cách thêm một phương thức khóa vào một đối tượng để có số mục mà nó nắm giữ khi nó trở thành một mảng kết hợp
Một mảng kết hợp được khai báo hoặc tạo động
Chúng ta có thể tạo nó bằng cách gán một chữ cho một biến
var arr = { "one": 1, "two": 2, "three": 3 };
Không giống như các mảng đơn giản, chúng tôi sử dụng dấu ngoặc nhọn thay vì dấu ngoặc vuông
Điều này đã ngầm tạo ra một biến kiểu Object
Nội dung được truy cập bằng các phím, bất kể phương thức được sử dụng để khai báo mảng là gì
var y = arr["one"];
Một mảng kết hợp cũng là một đối tượng
Vì vậy, chúng ta có thể tạo một mảng kết hợp với từ dành riêng cho Đối tượng, sau đó gán các khóa và giá trị
var o = new Object[];
o["one"] = 1;
o["two"] = 2;
o["three"] = 3;
for[var i in o]
{
document.write[i + "=" + o[i] + '
'];
}
Các thuộc tính của một đối tượng JavaScript cũng là các khóa
Điều cụ thể đối với các đối tượng trong JavaScript là các thuộc tính cũng là các khóa như chúng ta sẽ thấy trong phần minh họa.
Như vậy, cùng một mảng có thể được tạo đơn giản hơn.
var oa = new Object[];
oa.one = 1;
oa.two = 2;
oa.three = 3;
for[var i in oa]
{
document.write[i + "=" + x[i] + '
'];
}
Nhưng chúng ta phải sử dụng dạng chỉ mục nếu chúng ta sử dụng một biến làm khóa
Nhớ lại rằng thuộc tính độ dài không có giá trị
Một mảng kết hợp được quét với for in
Chúng ta không thể sử dụng vòng lặp for đơn giản vì chỉ mục không thể truy cập các phần tử [ngoài ra chúng ta phải sử dụng một hàm đặc biệt để xác định vị trí của phần tử cuối cùng], nhưng vòng lặp for càng đơn giản càng lý tưởng
Các khóa được gán cho biến "khóa" và với khóa, chúng tôi truy cập giá trị
var arr = { "one" : 1, "two" : 2, "three": 3 };
for[var key in arr]
{
var value = arr[key];
document.write[key + " = " + value + '
'];
}
Số hạng mục
Vì chúng ta không còn thuộc tính độ dài của đối tượng Mảng, nên vẫn cần thêm một phương thức vào Đối tượng để trả về kích thước của danh sách
Object.size = function[arr]
{
var size = 0;
for [var key in arr]
{
if [arr.hasOwnProperty[key]] size++;
}
return size;
};
Điều này cũng cho số lượng mặt hàng
var s = Object.size[x];
document.write["Size=" + s];
Danh sách tài sản
Kể từ ngày 1. 8. 5 của ECMAScript, chúng ta có thể lấy danh sách các thuộc tính của một đối tượng trong một câu lệnh
Object.keys[arr]
Từ đó, để lấy số key thật đơn giản
________số 8Phương thức keys trả về một mảng gồm tất cả các thuộc tính, vì vậy keys và chúng ta có thể áp dụng thuộc tính độ dài của Array
var a2 = { "a":1, "b":2, "c":3 }
document.write["Size=" + Object.keys[a2].length
Danh sách các giá trị
Chúng ta có thể chuyển đổi một mảng kết hợp, tức là một đối tượng, thành một mảng đơn giản. Với phương thức trả về danh sách khóa và phương thức bản đồ [ECMAScript 1. 6], chúng tôi cũng thu được các giá trị
Nếu một đối tượng được chuyển đổi thành một mảng, kết quả là một mảng có các phần tử là thuộc tính của đối tượng. Các khóa là tên biến thành viên, với một số ngoại lệ đáng chú ý như thuộc tính số nguyên không thể truy cập được và các biến được bảo vệ có '*' được thêm vào trước tên biến. Các giá trị được thêm vào trước này có các byte rỗng ở hai bên
Thí dụ. đối tượng đơn giản
var y = arr["one"];
0đầu ra
var y = arr["one"];
1Thí dụ. đối tượng phức tạp
var y = arr["one"];
2Đầu ra [với \0s được chỉnh sửa cho rõ ràng]
var y = arr["one"];
3Xuất ra với var_export thay vì var_dump
var y = arr["one"];
4Đánh máy theo cách này sẽ không truyền sâu biểu đồ đối tượng và bạn cần áp dụng các byte rỗng để truy cập bất kỳ thuộc tính không công khai nào. Vì vậy, điều này hoạt động tốt nhất khi truyền đối tượng StdClass hoặc đối tượng chỉ có thuộc tính công khai