2010-10-27 26 views
11

Có chức năng nào để đảm bảo rằng bất kỳ mảng nhất định nào phù hợp với cấu trúc cụ thể không? Những gì tôi có nghĩa là đó là có tên khóa cụ thể, có lẽ các loại cụ thể cho các giá trị, và bất cứ cấu trúc lồng nhau. Ngay bây giờ tôi có một nơi mà tôi muốn chắc chắn rằng mảng nhận được trong quá khứ có một số phím, một cặp vợ chồng đang nắm giữ một loại dữ liệu nhất định, và một mảng phụ với các tên khóa cụ thể. Tôi đã thực hiện rất nhiều chạy xung quanh bởi vì tôi đã đi qua mảng bị thay đổi với nó, và cuối cùng tôi đang ở điểm mà tôi có một loạt cácLàm cách nào để xác thực cấu trúc của các mảng PHP của tôi?

if (! isset($arr['key1'])) { .... } 
if (! isset($arr['key2'])) { .... } 
if (! isset($arr['key3'])) { .... } 

tôi sẽ tiết kiệm rất nhiều thời gian và kinh ngạc nếu tôi có thể kiểm tra xem mảng có phù hợp với một cấu trúc cụ thể trước đó hay không. Lý tưởng nhất là một cái gì đó như

$arrModel = array(
    'key1' => NULL , 
    'key2' => int , 
    'key3' => array(
     'key1' => NULL , 
     'key2' => NULL , 
    ), 
); 

if (! validate_array($arrModel, $arrCandidate)) { ... } 

Vì vậy, câu hỏi tôi đang hỏi là, điều này đã tồn tại hay tôi tự viết nó?

Trả lời

6

nó không tồn tại được xây dựng trong

Có thể thử một cái gì đó giống như (chưa được kiểm tra):

array_diff(array_merge_recursive($arrCandidate, $arrModel), $arrModel) 
+2

Tôi tin rằng bạn có nghĩa là array_merge_recursive –

+0

Tôi đã cảm ơn. (Cập nhật) –

0

Tạo một mảng xác định cấu trúc của bạn, và sau đó đi qua một vòng lặp của mảng mà bạn muốn kiểm tra và so sánh nó với cấu trúc mảng mà bạn đã xác định.

1

Tôi biết đây là một bài đăng cũ, xin lỗi nếu câu trả lời của tôi không phù hợp.

Tôi đang trong quá trình viết một gói php thực hiện chính xác những gì bạn đang yêu cầu, nó được gọi là Cấu trúc.

Những gì bạn có thể làm với các gói là một cái gì đó như:

$arrayCheck = new \Structure\ArrayS(); 
$arrayCheck->setFormat(array("profile"=>"array")); 
if ($arrayCheck->check($myArray)) { 
    //... 
} 

Bạn có thể kiểm tra xem nó ra ở đây: http://github.com/3nr1c/structure

1

Tôi đã xem qua một công cụ gọi là Matchmaker trên GitHub, trông rất toàn diện và có hỗ trợ nhà soạn nhạc và đơn vị kiểm tra:
https://github.com/ptrofimov/matchmaker

bạn có thể đưa nó vào dự án của bạn với composer require ptrofimov/matchmaker.

+0

Để ngẫu nhiên xuống cử tri: tại sao? Xin vui lòng để lại tin nhắn. Thư viện liên kết thực sự đáp ứng nhu cầu của người hỏi, và tôi không có liên kết với nó. –

+0

Tôi đã sử dụng lib đó và tốt cho việc xác nhận cấu trúc mảng. Tuy nhiên, nó thiếu hỗ trợ thông báo lỗi. Tôi chỉ có thể biết liệu xác thực có thành công không, nhưng chính xác điều gì đã xảy ra là không xác định. –

+0

@DmitriyLezhnev Sau đó, tại sao không gửi cho họ một số yêu cầu kéo để sửa chữa nó? –

0

câu trả lời được chấp nhận tạo sự khác biệt dựa trên giá trị, vì đó là về cấu trúc mảng bạn không muốn các giá trị khác. Được lập trình, bạn nên sử dụng array_diff_key()

Chỉ có chức năng không đệ quy. Nó sẽ không làm việc ra khỏi hộp trên mảng mẫu từ câu hỏi.

Các vấn đề liên quan