Làm cách nào chúng ta có thể tìm thấy các giá trị trùng lặp trong mảng nhiều chiều trong php?

Chúng tôi yêu thích Pluralsight vì nó có hàng nghìn nội dung khóa học chất lượng cao và học phí cực kỳ phải chăng. Bạn không phải trả tiền cho các khóa học cá nhân. Đó là một thành viên hàng tháng thực sự nhỏ và bạn có quyền truy cập vào toàn bộ danh mục. Bạn có thể theo dõi và xem xét tất cả tiến trình của mình và cũng có thể nhận được các chứng chỉ bổ sung

khóa học

  • Mẫu thiết kế PHP
  • PHP. Bức tranh lớn
  • PHP8. Bảo mật ứng dụng web
  • PHP hiệu suất cao
  • PHP hướng đối tượng

Con đường học tập

  • Nguyên tắc cơ bản về phát triển PHP

Bản dùng thử miễn phí của Pluralsight

Tò mò về Pluralsight nhưng chưa sẵn sàng cam kết? . Chúng tôi đã có thể cho bạn dùng thử miễn phí để lái thử và xem tất cả các khóa học của họ. Click vào liên kết dưới đây

Dùng thử miễn phí Pluralsight trong 7 ngày

Giới thiệu

Bài này viết về cách đếm giá trị trong mảng đa chiều PHP. Nói cách khác, tìm tần số của các giá trị lặp lại trong một mảng nhiều chiều. Cho đến nay, chúng ta đã thấy rằng mối quan tâm chính trong mảng đa chiều là sự lồng ghép hoặc mức độ sâu. Một nguyên tắc chung là tránh cách tiếp cận lặp đi lặp lại nếu mức tối đa vượt quá hai hoặc ba

Làm cách nào chúng ta có thể tìm thấy các giá trị trùng lặp trong mảng nhiều chiều trong php?

Chúng tôi đã giải thích lý do tại một trong những bài viết mà chúng tôi đã phân biệt cách tiếp cận iterativerecursive. Ở đây chúng ta sẽ sử dụng cả hai cách tiếp cận này và một số hàm tích hợp trong ngữ cảnh của các giá trị đếm PHP trong mảng đa chiều. Vì vậy, hãy chuyển sang tùy chọn đầu tiên

Đếm giá trị trong mảng đa chiều PHP – Phương pháp lặp

iterative approach sử dụng các trình lặp, vòng lặp để truy cập mảng. Vòng lặp foreach trong PHP rất hữu ích khi lặp qua một mảng và có thể là một lựa chọn tốt nếu mảng đa chiều có tối đa ba cấp độ, như đã đề cập ở trên. Hãy xem một ví dụ

Thí dụ

Chúng tôi có một mảng students_electives chứa tên sinh viên làm khóa và mảng để lưu thông tin về môn học tự chọn của họ. Mảng chỉ có hai cấp độ và đó là lý do tại sao đây là trường hợp sử dụng tốt cho cách tiếp cận lặp lại

$students_electives = [
    "Andy" => ["ID"=>"1001", "Elective"=>"Computer Science"],
    "Benjamin" => ["ID"=>"1002", "Elective"=>"Electronics"],
    "Catheline" => ["ID"=>"1003", "Elective"=>"Economics"],
    "Dexter" => ["ID"=>"1004", "Elective"=>"Computer Science"],
    "Eion" => ["ID"=>"1004", "Elective"=>"Computer Science"],
    "Franklin" => ["ID"=>"1005", "Elective"=>"Mathematics"],
    "Gina" => ["ID"=>"1006", "Elective"=>"Chemistry"],
    "Hudson" => ["ID"=>"1007", "Elective"=>"Electronics"],
    "Ira" => ["ID"=>"1008","Elective"=>"Mathematics"],
    "Jessica" => ["ID"=>"1009","Elective"=>"Economics"],
    "Kelvin" => ["ID"=>"1010","Elective"=>"Computer Science"],
    "Liam" =>  ["ID"=>"1011","Elective"=>"Mathematics"],
];

Vì vậy, mục tiêu là tìm tần số của các môn học tự chọn. Hãy cùng tìm hiểu

$resultant = [];
foreach($students_electives as $student=>$elective) {
    //Check if a key has been created for the subject
    if(!isset($resultant[$elective["Elective"]])) {
        //Initiate the count to one for the newly created subject.
        $resultant[$elective["Elective"]] = 1;
    }
 
    else {
        //If a subject reoccurs then increase the count by one.
        $resultant[$elective["Elective"]] += 1;
    }
}
 
print_r($resultant);
 
/*
OUTPUT
Array
(
    [Computer Science] => 4
    [Electronics] => 2     
    [Economics] => 2
    [Mathematics] => 3
    [Chemistry] => 1
)
*/

thì đấy. Mã đếm các giá trị tự chọn định kỳ bằng cách tăng khóa tương ứng được tạo trong mảng kết quả. Ngoài ra, hãy quan sát rằng chúng ta đã truy cập trực tiếp vào mảng ở cấp độ hai bằng cách sử dụng khóa/chỉ mục. Truy cập trực tiếp có thể không thực hiện được mọi lúc và đặc biệt nếu bạn đã phân tích cú pháp phản hồi XML hoặc JSON từ máy chủ

Vì vậy, hãy luôn đảm bảo tránh nhiều hơn ba vòng lặp lồng nhau. Ngoài ra, có cách tiếp cận đệ quy. Hãy cũng kiểm tra xem.  

Tùy chọn # 2 Phương pháp đệ quy

Vì vậy, trước khi chuyển sang ví dụ, hãy thêm một môn tự chọn khác vào mỗi bản ghi sinh viên trong mảng. Đó chỉ là làm cho mảng được lồng vào nhau hơn và có ba cấp độ. Cách tiếp cận đệ quy là lý tưởng để đào sâu vào một mảng đa chiều


Đối với phương pháp recursive, chúng ta có thể sử dụng hàm

$students_electives = [
    "Andy" => ["ID"=>"1001", "Elective"=>"Computer Science"],
    "Benjamin" => ["ID"=>"1002", "Elective"=>"Electronics"],
    "Catheline" => ["ID"=>"1003", "Elective"=>"Economics"],
    "Dexter" => ["ID"=>"1004", "Elective"=>"Computer Science"],
    "Eion" => ["ID"=>"1004", "Elective"=>"Computer Science"],
    "Franklin" => ["ID"=>"1005", "Elective"=>"Mathematics"],
    "Gina" => ["ID"=>"1006", "Elective"=>"Chemistry"],
    "Hudson" => ["ID"=>"1007", "Elective"=>"Electronics"],
    "Ira" => ["ID"=>"1008","Elective"=>"Mathematics"],
    "Jessica" => ["ID"=>"1009","Elective"=>"Economics"],
    "Kelvin" => ["ID"=>"1010","Elective"=>"Computer Science"],
    "Liam" =>  ["ID"=>"1011","Elective"=>"Mathematics"],
];
1. Hãy nhớ rằng chức năng này chỉ truy cập các nút lá. May mắn thay, các môn tự chọn là các nút lá trong mảng students_electives. Đó là lý do tại sao sử dụng chức năng này tốt hơn là viết một chức năng của riêng chúng tôi

$students_electives = [
    "Andy" => ["ID"=>"1001", "Elective"=>["Computer Science","Electronics"]],
    "Benjamin" => ["ID"=>"1002", "Elective"=>["Electronics","Mathematics"]],
    "Catheline" => ["ID"=>"1003", "Elective"=>["Economics","Mathematics"]],
    "Dexter" => ["ID"=>"1004", "Elective"=>["Computer Science","Mathematics"]],
    "Eion" => ["ID"=>"1004", "Elective"=>["Computer Science","Economics"]],
    "Franklin" => ["ID"=>"1005", "Elective"=>["Mathematics","Chemistry"]],
    "Gina" => ["ID"=>"1006", "Elective"=>["Chemistry","Biology"]],
    "Hudson" => ["ID"=>"1007", "Elective"=>["Electronics","Digital Logic Design"]],
    "Ira" => ["ID"=>"1008","Elective"=>["Mathematics","Digital Logic Design"]],
    "Jessica" => ["ID"=>"1009","Elective"=>["Economics","Mathematics"]],
    "Kelvin" => ["ID"=>"1010","Elective"=>["Computer Science","Digital Logic Design"]],
    "Liam" =>  ["ID"=>"1011","Elective"=>["Mathematics","Chemistry"]]
];

Thí dụ

$resultant = [];
 
array_walk_recursive($students_electives,function($value,$key) use (&$resultant){
    if(!is_numeric($value)) {
        //Initiate the count to one for the newly created subject.
        if(!isset($resultant[$value])) {
            $resultant[$value] = 1;
        }
 
        //If a subject reoccurs then increase the count by one.
        else {
            $resultant[$value] += 1;
        }
    }    
},$resultant);
 
print_r($resultant);
 
/*
OUTPUT
Array
(
    [Computer Science] => 4    
    [Electronics] => 3
    [Mathematics] => 7
    [Economics] => 3
    [Chemistry] => 3
    [Biology] => 1
    [Digital Logic Design] => 3
)
*/

Ví dụ hoạt động tốt. Chúng tôi có số lượng tần suất cho tất cả các đối tượng và chúng tôi nhận được điều này bằng cách chỉ gọi một hàm. Vì vậy, nó là một phiên bản tái cấu trúc của những gì chúng ta đã thấy trước đó. Một điều cần lưu ý là chúng tôi đã giữ _________2 kiểm tra trong cuộc gọi lại. Đó là để lọc ra Id vì chúng là các nút lá và được chọn bởi hàm array_walk_recursive trong khi PHP đếm các giá trị trong mảng đa chiều

Tiếp theo, hãy xem một cách tiếp cận khác để đếm các giá trị trong mảng đa chiều PHP

Tùy chọn #3 – Đếm giá trị trong mảng đa chiều PHP – Các hàm tích hợp

Ví dụ mà chúng ta sẽ thấy ở đây là một ví dụ đơn giản mạnh mẽ tương đương với những gì chúng ta đã thấy trong các ví dụ trước. Chúng tôi đã sử dụng một chuỗi các cuộc gọi đến một số chức năng tích hợp. Vì vậy, hãy xem ví dụ trước và sau đó chia nhỏ nó để rõ ràng

Thí dụ

print_r(array_count_values(array_merge(...array_column($students_electives,"Elective"))));
 
/*
OUTPUT
Array
(
    [Computer Science] => 4
    [Electronics] => 3
    [Mathematics] => 7
    [Economics] => 3
    [Chemistry] => 3
    [Biology] => 1
    [Digital Logic Design] => 3
)
*/

Phá vỡ

  • $students_electives = [
        "Andy" => ["ID"=>"1001", "Elective"=>"Computer Science"],
        "Benjamin" => ["ID"=>"1002", "Elective"=>"Electronics"],
        "Catheline" => ["ID"=>"1003", "Elective"=>"Economics"],
        "Dexter" => ["ID"=>"1004", "Elective"=>"Computer Science"],
        "Eion" => ["ID"=>"1004", "Elective"=>"Computer Science"],
        "Franklin" => ["ID"=>"1005", "Elective"=>"Mathematics"],
        "Gina" => ["ID"=>"1006", "Elective"=>"Chemistry"],
        "Hudson" => ["ID"=>"1007", "Elective"=>"Electronics"],
        "Ira" => ["ID"=>"1008","Elective"=>"Mathematics"],
        "Jessica" => ["ID"=>"1009","Elective"=>"Economics"],
        "Kelvin" => ["ID"=>"1010","Elective"=>"Computer Science"],
        "Liam" =>  ["ID"=>"1011","Elective"=>"Mathematics"],
    ];
    
    3  – Thống nhất cột đã chỉ định trong một mảng. Vì vậy, các môn tự chọn của tất cả các sinh viên được giữ trong một mảng
  • $students_electives = [
        "Andy" => ["ID"=>"1001", "Elective"=>"Computer Science"],
        "Benjamin" => ["ID"=>"1002", "Elective"=>"Electronics"],
        "Catheline" => ["ID"=>"1003", "Elective"=>"Economics"],
        "Dexter" => ["ID"=>"1004", "Elective"=>"Computer Science"],
        "Eion" => ["ID"=>"1004", "Elective"=>"Computer Science"],
        "Franklin" => ["ID"=>"1005", "Elective"=>"Mathematics"],
        "Gina" => ["ID"=>"1006", "Elective"=>"Chemistry"],
        "Hudson" => ["ID"=>"1007", "Elective"=>"Electronics"],
        "Ira" => ["ID"=>"1008","Elective"=>"Mathematics"],
        "Jessica" => ["ID"=>"1009","Elective"=>"Economics"],
        "Kelvin" => ["ID"=>"1010","Elective"=>"Computer Science"],
        "Liam" =>  ["ID"=>"1011","Elective"=>"Mathematics"],
    ];
    
    4 – Hàm này gộp mảng nhận được từ array_column thành mảng một chiều
  • $students_electives = [
        "Andy" => ["ID"=>"1001", "Elective"=>"Computer Science"],
        "Benjamin" => ["ID"=>"1002", "Elective"=>"Electronics"],
        "Catheline" => ["ID"=>"1003", "Elective"=>"Economics"],
        "Dexter" => ["ID"=>"1004", "Elective"=>"Computer Science"],
        "Eion" => ["ID"=>"1004", "Elective"=>"Computer Science"],
        "Franklin" => ["ID"=>"1005", "Elective"=>"Mathematics"],
        "Gina" => ["ID"=>"1006", "Elective"=>"Chemistry"],
        "Hudson" => ["ID"=>"1007", "Elective"=>"Electronics"],
        "Ira" => ["ID"=>"1008","Elective"=>"Mathematics"],
        "Jessica" => ["ID"=>"1009","Elective"=>"Economics"],
        "Kelvin" => ["ID"=>"1010","Elective"=>"Computer Science"],
        "Liam" =>  ["ID"=>"1011","Elective"=>"Mathematics"],
    ];
    
    5 – Hàm này sau đó đếm tần suất của các giá trị

Lưu ý … trước array_column. Tính năng này là

$students_electives = [
    "Andy" => ["ID"=>"1001", "Elective"=>"Computer Science"],
    "Benjamin" => ["ID"=>"1002", "Elective"=>"Electronics"],
    "Catheline" => ["ID"=>"1003", "Elective"=>"Economics"],
    "Dexter" => ["ID"=>"1004", "Elective"=>"Computer Science"],
    "Eion" => ["ID"=>"1004", "Elective"=>"Computer Science"],
    "Franklin" => ["ID"=>"1005", "Elective"=>"Mathematics"],
    "Gina" => ["ID"=>"1006", "Elective"=>"Chemistry"],
    "Hudson" => ["ID"=>"1007", "Elective"=>"Electronics"],
    "Ira" => ["ID"=>"1008","Elective"=>"Mathematics"],
    "Jessica" => ["ID"=>"1009","Elective"=>"Economics"],
    "Kelvin" => ["ID"=>"1010","Elective"=>"Computer Science"],
    "Liam" =>  ["ID"=>"1011","Elective"=>"Mathematics"],
];
6 và nó hiện ra các mảng con. Do đó, các mảng này chuyển sang array_merge trong ví dụ. Nếu bạn cần rõ ràng hơn, hãy thử ví dụ và in kết quả của các chức năng này ra bàn điều khiển cùng một lúc để xem quá trình chuyển đổi trong quá trình thực hiện

Phần kết luận

Đó là nó cho bài viết này. Chúng ta đã thấy ba tùy chọn khác nhau liên quan đến giá trị đếm PHP trong mảng đa chiều. Đầu tiên là cách tiếp cận lặp, tiếp theo là cách tiếp cận đệ quy. Cuối cùng, chúng tôi đã khám phá cách xếp chồng một số hàm tích hợp có liên quan để đếm các giá trị trong mảng. Chúng tôi hy vọng bạn thích nó. Hãy theo dõi các bài viết và hướng dẫn PHP thú vị và nhiều thông tin hơn

Bài viết liên quan

Làm cách nào chúng ta có thể tìm thấy các giá trị trùng lặp trong mảng nhiều chiều trong php?
Cách lấy tổng số giá trị cụ thể trong một mảng PHP
Làm cách nào chúng ta có thể tìm thấy các giá trị trùng lặp trong mảng nhiều chiều trong php?
Cách chuyển đổi một mảng PHP thành xml
Làm cách nào chúng ta có thể tìm thấy các giá trị trùng lặp trong mảng nhiều chiều trong php?
Mảng đối tượng trong PHP. Tạo, Sắp xếp, Lọc, Hợp nhất, Tìm kiếm, v.v
Làm cách nào chúng ta có thể tìm thấy các giá trị trùng lặp trong mảng nhiều chiều trong php?
Mảng kết hợp hoặc bản đồ băm trong PHP là gì


  • ← Cách tìm và loại bỏ các giá trị trùng lặp trong mảng PHP
  • Tìm giá trị trong một mảng PHP đa chiều. Ví dụ về mã 2023 →

Viết mã tốt hơn nhanh hơn

Nhấp vào đây để nhận các bí mật hàng đầu 'Trở thành Rockstar PHP Dev trong 7 ngày' của chúng tôi được gửi đến hộp thư đến của bạn

đăng ký

Làm cách nào chúng ta có thể tìm thấy các giá trị trùng lặp trong mảng nhiều chiều trong php?

Stephen Phép Lạ

Chào. Tôi hy vọng bạn thích bài viết này. Tôi đã phát triển các trang web và phần mềm một cách chuyên nghiệp trong hơn 20 năm. Tôi bắt đầu FuelingPHP như một cách để đền đáp lại cộng đồng nguồn mở đã giúp tôi có thể sống thoải mái khi xây dựng những thứ tôi yêu thích

Làm cách nào để tìm giá trị trùng lặp trong mảng đa chiều PHP?

Để hợp nhất giá trị trùng lặp trong một mảng nhiều chiều trong PHP, trước tiên, tạo một mảng trống sẽ chứa kết quả cuối cùng. Sau đó, chúng tôi duyệt qua từng phần tử trong mảng và kiểm tra tính trùng lặp của nó bằng cách so sánh nó với các phần tử khác .

Làm cách nào để nhận các giá trị duy nhất từ ​​​​mảng đa chiều trong PHP?

Bạn có thể sử dụng hàm duy nhất của mảng PHP cùng với các hàm mảng khác để nhận các giá trị duy nhất từ ​​một mảng nhiều chiều trong khi vẫn giữ nguyên các khóa.

Làm cách nào chúng ta có thể tìm thấy sự khác biệt giữa hai mảng nhiều chiều trong PHP?

Hàm array_diff_assoc() so sánh các khóa và giá trị của hai (hoặc nhiều) mảng và trả về sự khác biệt. Hàm này so sánh các khóa và giá trị của hai (hoặc nhiều) mảng và trả về một mảng chứa các mục từ mảng1 không có trong mảng2 hoặc mảng3, v.v.

Làm cách nào để xóa các giá trị trùng lặp khỏi mảng kết hợp trong PHP?

Hàm array_unique() xóa các giá trị trùng lặp khỏi một mảng. Nếu hai hoặc nhiều giá trị mảng giống nhau, thì giá trị đầu tiên sẽ được giữ lại và giá trị còn lại sẽ bị xóa.