Làm cách nào để xóa khóa và giá trị khỏi mảng đa chiều trong PHP?

Mảng đa chiều phức tạp hơn nhiều so với mảng tuyến tính. Tương tự như vậy, việc cập nhật các khóa cụ thể trong một mảng đa chiều bằng cách sử dụng phương pháp lặp là phức tạp và không thể đoán trước.  

Vì vậy, trong bài viết này, chúng ta sẽ vượt qua thử thách và khám phá cách cập nhật khóa cụ thể trong mảng đa chiều trong PHP.  

Làm cách nào để cập nhật giá trị khóa trong mảng PHP?

Bài viết “Cách cập nhật giá trị khóa trong mảng PHP” khám phá ba tùy chọn để thay đổi khóa trong một mảng tuyến tính.  

  • Một cách tiếp cận vòng lặp
  • Phương pháp lập chỉ mục trực tiếp
  • Sử dụng hàm array_search trong PHP

Trong số ba điều này, lập chỉ mục trực tiếp nổi bật về hiệu quả. Điều đó nói rằng, bài viết này sẽ sử dụng kết hợp những thứ này để phát triển một hàm chung để xử lý các mảng nhiều chiều

Cách cập nhật khóa cụ thể trong mảng đa chiều trong PHP

Trước khi đi sâu vào các ví dụ mã, trước tiên hãy xem mảng nhiều chiều

$students =
[
   "Sam" =>   ["Exam#1" => 87],
   "Brian" => ["Exam#1" => 80],
   "Chris" => ["Exam#1" => 92],
   "Sarah" => ["Exam#1"=> 90]
];

Mảng $students là mảng hai chiều. Các mục tiêu ở đây là để

  • Tìm khóa trong mảng nhiều chiều
  • Cập nhật khóa cụ thể trong mảng đa chiều

Hãy xem một ví dụ sử dụng vòng lặp và lập chỉ mục trực tiếp để cập nhật khóa “Bài kiểm tra số 1” thành “MidTerm” trong tất cả các mảng con.  

<?php
 
$students =
[
   "Sam" =>   ["Exam#1" => 87],
   "Brian" => ["Exam#1" => 80],
   "Chris" => ["Exam#1" => 92],
   "Sarah" => ["Exam#1"=> 90]
];
 
function changeName($array, $oldKey, $newKey)
{
    foreach($array as $k => &$v)
    {
        if(array_key_exists($oldKey, $v)) //If key exists in the subarray
        {
            $value = $v[$oldKey];    //Passes the value to a variable using direct indexing.
            $v[$newKey] = $value; //Make a pair with the new key.
            unset($v[$oldKey]); //Unsets the old key and value pair.
        }
    }
 
    return $array;
}
 
$students = changeName($students, 'Exam#1', 'MidTerm');
 
?>

Đây là sự cố của chức năng changeName

  • Vòng lặp lặp qua mảng và $v đề cập đến các mảng con
  • PHP array_key_exists kiểm tra xem khóa có sẵn một mảng con không
  • Khối bên trong array_key_exists cập nhật khóa và bỏ đặt khóa cũ hơn
  • Cuối cùng, hàm trả về mảng đã cập nhật

Vì vậy, đây là đầu ra của hàm cho mảng ở trên

Array
(
    [Sam] => Array
        (
            [MidTerm] => 87
        )
 
    [Brian] => Array
        (
            [MidTerm] => 80
        )
 
    [Chris] => Array
        (
            [MidTerm] => 92
        )
 
    [Sarah] => Array
        (
            [MidTerm] => 90
        )
 
)

Trông mát mẻ. Nhưng giả sử mảng nhiều chiều thay đổi thành một thứ như sau

$students =
[
   [
       "Name" => "Sam",
       "Exams" => [
           "Exam#1" => 87
       ]
   ],
   [
    "Name" => "Brian",
    "Exams" => [
        "Exam#1" => 80
    ],
    [
        "Name" => "Chris",
        "Exams" => [
            "Exam#1" => 92
        ]
    ],
    [
        "Name" => "Sarah",
        "Exams" => [
            "Exam#1" => 90
        ]
    ],
],
 
];

Nó có vẻ vô nghĩa nhưng tệ hơn là chức năng không hỗ trợ cấu trúc này. Nó sẽ báo lỗi ngay lập tức. Nói một cách đơn giản hơn, nó không đủ chung chung. Vì vậy, lối thoát sau đó là gì?

Lối thoát là viết một hàm chung sử dụng đệ quy. Vì vậy, trong phần tiếp theo, chúng ta sẽ xem cách cập nhật khóa cụ thể trong mảng nhiều chiều bằng cách sử dụng đệ quy

Cập nhật đệ quy khóa cụ thể trong mảng đa chiều trong PHP

Các thuật toán đệ quy thích ứng với các mảng bất kể kích thước của chúng và đó là lý do tại sao chúng siêu linh hoạt và mạnh mẽ. Ví dụ sau sử dụng hàm đệ quy để cập nhật khóa cụ thể trong mảng đa chiều trong PHP

function changeName(&$array, $oldKey, $newKey)
{
    foreach($array as $k => &$v)
    {
        if(gettype($v) == 'array')
        {
            if(array_key_exists($oldKey, $v)) //If key exists in the subarray
            {
                $value = $v[$oldKey];    //Passes the value to a variable using direct indexing.
                $v[$newKey] = $value; //Make a pair with the new key.
                unset($v[$oldKey]); //Unsets the old key and value pair.
            }
            else
            {
                changeName($v, $oldKey, $newKey); //Go a level deep to find the key.
            }
        }
    }
 
}

Hàm changeName đã được sửa đổi thành hàm đệ quy. Logic cốt lõi của việc cập nhật khóa trông giống nhau. Các lệnh gọi đệ quy xảy ra nếu hàm không tìm thấy khóa trong một mảng con.  

Vì vậy, nó sẽ giảm càng nhiều cấp độ càng tốt chỉ để tìm và cập nhật một khóa cụ thể. Ngoài ra, lưu ý rằng chúng tôi sẽ không trả về từ hàm vì nó lấy mảng theo tham chiếu, do đó thực hiện các thay đổi tại chỗ

Đây là đầu ra

Array
(
    [0] => Array
        (
            [Name] => Sam
            [Exams] => Array
                (
                    [MidTerm] => 87
                )
 
        )
 
    [1] => Array
        (
            [Name] => Brian
            [Exams] => Array
                (
                    [MidTerm] => 80
                )
 
            [0] => Array
                (
                    [Name] => Chris
                    [Exams] => Array
                        (
                            [MidTerm] => 92
                        )
 
                )
 
            [1] => Array
                (
                    [Name] => Sarah
                    [Exams] => Array
                        (
                            [MidTerm] => 90
                        )
 
                )
 
        )
 
)

thì đấy. Chúng tôi đã tạo một hàm chung để cập nhật khóa cụ thể trong một mảng đa chiều trong PHP

Phần kết luận

Bài viết tổng quan về những thách thức khi làm việc với một mảng nhiều chiều và sau đó khám phá một ví dụ không chung chung nhưng cập nhật thành công một khóa cụ thể. Sau đó, bài viết chuyển sang một hàm đệ quy chung cập nhật một khóa cụ thể trong một mảng đa chiều ở bất kỳ độ sâu nào

Hy vọng, bạn đã thích bài viết này. Tìm hiểu thêm về PHP tại FuelingPHP.  

Bạn muốn tìm hiểu thêm về PHP?

Chúng tôi có nhiều bài viết thú vị liên quan đến PHP. Bạn có thể khám phá những điều này để tìm hiểu thêm về PHP

  • Cách đẩy mục lên chỉ mục đầu tiên của mảng PHP
  • Giới thiệu về Symfony Doctrine PHP ArrayCollection
  • Cách chia mảng nhiều chiều trong PHP

Bài viết liên quan

Làm cách nào để xóa khóa và giá trị khỏi mảng đa chiều trong PHP?
Cách cập nhật giá trị khóa trong mảng kết hợp PHP
Làm cách nào để xóa khóa và giá trị khỏi mảng đa chiều trong PHP?
Cách sử dụng array_map với mảng nhiều chiều trong PHP
Làm cách nào để xóa khóa và giá trị khỏi mảng đa chiều trong PHP?
Cách lấy tổng số lượng cụ thể
Làm cách nào để xóa khóa và giá trị khỏi mảng đa chiều trong PHP?
What is an associative array or hash map in PHP


  • ← Cách xóa Khóa/Giá trị khỏi Mảng PHP. Ví dụ về mã 2023
  • Chuyển đổi mảng đa chiều PHP sang CSV bằng mã fputcsv ví dụ →

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 để xóa khóa và giá trị khỏi mảng đa 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 để xóa khóa mảng khỏi mảng đa chiều trong PHP?

Xóa khóa khỏi mảng kết hợp php . $array = array("key1" => "value1", "key2" => "value2"); . Here we will remove/delete the elements/values in the array with the key without using array_pop function.

Làm cách nào để xóa khóa và giá trị khỏi mảng trong PHP?

Để xóa một khóa và giá trị tương ứng của nó khỏi một mảng kết hợp trong PHP, bạn có thể sử dụng hàm unset() . Như tên của hàm gợi ý, bạn sử dụng hàm unset() để bỏ đặt một biến đã cho hoặc trong trường hợp này là một khóa mảng với giá trị của nó.

Làm cách nào để xóa phần tử đầu tiên khỏi mảng đa chiều trong PHP?

Hàm array_shift() xóa phần tử đầu tiên khỏi một mảng và trả về giá trị của phần tử đã xóa.

Làm cách nào để xóa phần tử cuối cùng khỏi mảng đa chiều trong PHP?

Để xóa phần tử hoặc giá trị cuối cùng khỏi một mảng, sử dụng hàm array_pop() . Hàm này trả về phần tử bị loại bỏ cuối cùng của mảng và trả về NULL nếu mảng trống hoặc không phải là mảng.