Làm cách nào để xóa nhiều khóa khỏi mảng trong PHP?

Giả sử bạn có một mảng và bạn muốn xóa một hoặc nhiều phần tử khỏi mảng đó bằng PHP. Có thể bạn phải xóa một phần tử có giá trị cụ thể hoặc có thể bạn phải xóa nhiều phần tử liên tiếp. Trong bài viết này, bạn sẽ tìm hiểu về các hàm PHP sẵn có khác nhau có thể giúp bạn xóa một hoặc nhiều phần tử dựa trên khóa hoặc giá trị của chúng. Dưới đây là một vài biến mà chúng ta sẽ sử dụng

PHP

$num_array = ["Amanda", "John", "Kelly", "Megan", "Henry"];
$asc_array = ["first" => "Amanda", "second" => "John",
              "third" => "Kelly", "fourth" => "Megan",
              "fifth" => "Henry"];

Tôi đã sử dụng cú pháp mảng ngắn trong đoạn mã trên để thay thế array(your, elements) bằng [your, elements]

Trên trang này

Xóa một phần tử khỏi một mảng bằng khóa của nó bằng cách sử dụng unset()

Cách dễ nhất để loại bỏ hoặc xóa một phần tử khỏi một mảng trong PHP là sử dụng hàm unset(). Hàm này được sử dụng để bỏ đặt một biến đã cho. Nói cách khác, bạn có thể sử dụng nó để hủy bất kỳ biến nào trong mã của mình

Để xóa một phần tử mảng bằng khóa của nó, hãy cung cấp hàm unset() với khóa của phần tử mà bạn muốn xóa. Trong trường hợp mảng số, khóa này sẽ là chỉ số của phần tử. Đây là một ví dụ

PHP

$num_array = ["Amanda", "John", "Kelly", "Megan", "Henry"];
$asc_array = ["first" => "Amanda", "second" => "John",
              "third" => "Kelly", "fourth" => "Megan",
              "fifth" => "Henry"];

unset($num_array[2]);
print_r($num_array);
/* Output —
Array
(
    [0] => Amanda
    [1] => John
    [3] => Megan
    [4] => Henry
) */

unset($asc_array["third"]);
print_r($asc_array);
/* Output —
Array
(
    [first] => Amanda
    [second] => John
    [fourth] => Megan
    [fifth] => Henry
) */

Bạn nên lưu ý rằng các khóa của cả hai mảng không thay đổi sau khi xóa phần tử khỏi mảng. Nếu bạn muốn lập chỉ mục lại các khóa sau khi xóa phần tử để không có khoảng trống, bạn có thể sử dụng hàm array_values(). Hàm này trả về một mảng được lập chỉ mục gồm tất cả các giá trị trong mảng được cung cấp

Hãy nhớ rằng

$num_array = ["Amanda", "John", "Kelly", "Megan", "Henry"];
$asc_array = ["first" => "Amanda", "second" => "John",
              "third" => "Kelly", "fourth" => "Megan",
              "fifth" => "Henry"];

unset($num_array[2]);
print_r($num_array);
/* Output —
Array
(
    [0] => Amanda
    [1] => John
    [3] => Megan
    [4] => Henry
) */

unset($asc_array["third"]);
print_r($asc_array);
/* Output —
Array
(
    [first] => Amanda
    [second] => John
    [fourth] => Megan
    [fifth] => Henry
) */
0 cũng sẽ thay đổi các khóa của mảng kết hợp thành các chỉ số số. Ví dụ sau sẽ làm rõ cách lập chỉ mục lại một mảng sau khi loại bỏ một phần tử hoạt động

PHP

$num_array = ["Amanda", "John", "Kelly", "Megan", "Henry"];
$asc_array = ["first" => "Amanda", "second" => "John",
              "third" => "Kelly", "fourth" => "Megan",
              "fifth" => "Henry"];

unset($num_array[2]);
$reindexed = array_values($num_array);
print_r($reindexed);
/* Output —
Array
(
    [0] => Amanda
    [1] => John
    [2] => Megan
    [3] => Henry
) */

unset($asc_array["third"]);
$reindexed = array_values($asc_array);
print_r($reindexed);
/* Output —
Array
(
    [0] => Amanda
    [1] => John
    [2] => Megan
    [3] => Henry
) */

Xóa một phần tử khỏi một mảng theo giá trị của nó bằng cách sử dụng unset()

Vấn đề duy nhất với giải pháp trên là bạn thực sự cần biết khóa để xóa một phần tử. Giả sử bạn chỉ biết giá trị của phần tử mà bạn muốn xóa và không biết về khóa của phần tử đó. Trong những trường hợp như vậy, trước tiên bạn có thể sử dụng hàm array_search() trong PHP để lấy khóa cho một giá trị đã cho, sau đó sử dụng unset() để xóa phần tử

PHP

$num_array = ["Amanda", "John", "Kelly", "Megan", "Henry"];
$asc_array = ["first" => "Amanda", "second" => "John",
              "third" => "Kelly", "fourth" => "Megan",
              "fifth" => "Henry"];

$key = array_search("John", $num_array);
unset($num_array[$key]);
print_r($num_array);
/* Output —
Array
(
    [0] => Amanda
    [2] => Kelly
    [3] => Megan
    [4] => Henry
) */

$key = array_search("John", $asc_array);
unset($asc_array[$key]);
print_r($asc_array);
/* Output —
Array
(
    [first] => Amanda
    [third] => Kelly
    [fourth] => Megan
    [fifth] => Henry
) */

Như bạn đã thấy trong ví dụ trên, bạn có thể sử dụng đồng thời

$num_array = ["Amanda", "John", "Kelly", "Megan", "Henry"];
$asc_array = ["first" => "Amanda", "second" => "John",
              "third" => "Kelly", "fourth" => "Megan",
              "fifth" => "Henry"];

unset($num_array[2]);
print_r($num_array);
/* Output —
Array
(
    [0] => Amanda
    [1] => John
    [3] => Megan
    [4] => Henry
) */

unset($asc_array["third"]);
print_r($asc_array);
/* Output —
Array
(
    [first] => Amanda
    [second] => John
    [fourth] => Megan
    [fifth] => Henry
) */
2 và unset() để loại bỏ hoặc xóa một phần tử mảng theo giá trị của nó

Sử dụng array_splice() để xóa nhiều phần tử liên tiếp khỏi một mảng

Hàm array_splice() trong PHP được sử dụng để loại bỏ một phần của mảng và thay thế bằng phần khác. Tuy nhiên, cung cấp thay thế là tùy chọn và bạn có thể sử dụng chức năng này để loại bỏ một phần của mảng trong một lần. Đây là một ví dụ

PHP

$num_array = ["Amanda", "John", "Kelly", "Megan", "Henry"];
$asc_array = ["first" => "Amanda", "second" => "John",
              "third" => "Kelly", "fourth" => "Megan",
              "fifth" => "Henry"];
$fruits = ["Apple", "Mango", "Banana", "Lichi", "Pear", "Grapes", "Guava", "Papaya", "Orange"];

array_splice($num_array, 2, 1);
print_r($num_array);
/* Output —
Array
(
    [0] => Amanda
    [1] => John
    [2] => Megan
    [3] => Henry
) */

array_splice($asc_array, 2, 1);
print_r($asc_array);
/* Output —
Array
(
    [first] => Amanda
    [second] => John
    [fourth] => Megan
    [fifth] => Henry
) */

array_splice($fruits, 3, 4);
print_r($fruits);
/* Output —
Array
(
    [0] => Apple
    [1] => Mango
    [2] => Banana
    [3] => Papaya
    [4] => Orange
) */

Bên cạnh việc loại bỏ nhiều phần tử cùng một lúc, một ưu điểm khác của phương pháp này là các phím số được tự động lập chỉ mục lại. Đồng thời, các khóa của mảng kết hợp không thay đổi

Một điểm quan trọng mà bạn nên nhớ là bạn phải chuyển phần bù làm tham số thứ hai chứ không phải khóa. Đó là lý do tại sao chúng tôi không chuyển khóa

$num_array = ["Amanda", "John", "Kelly", "Megan", "Henry"];
$asc_array = ["first" => "Amanda", "second" => "John",
              "third" => "Kelly", "fourth" => "Megan",
              "fifth" => "Henry"];

unset($num_array[2]);
print_r($num_array);
/* Output —
Array
(
    [0] => Amanda
    [1] => John
    [3] => Megan
    [4] => Henry
) */

unset($asc_array["third"]);
print_r($asc_array);
/* Output —
Array
(
    [first] => Amanda
    [second] => John
    [fourth] => Megan
    [fifth] => Henry
) */
4 làm giá trị của tham số
$num_array = ["Amanda", "John", "Kelly", "Megan", "Henry"];
$asc_array = ["first" => "Amanda", "second" => "John",
              "third" => "Kelly", "fourth" => "Megan",
              "fifth" => "Henry"];

unset($num_array[2]);
print_r($num_array);
/* Output —
Array
(
    [0] => Amanda
    [1] => John
    [3] => Megan
    [4] => Henry
) */

unset($asc_array["third"]);
print_r($asc_array);
/* Output —
Array
(
    [first] => Amanda
    [second] => John
    [fourth] => Megan
    [fifth] => Henry
) */
5 thứ hai khi xóa các phần tử khỏi mảng kết hợp. Tham số thứ ba được sử dụng để chỉ định số phần tử bắt đầu từ
$num_array = ["Amanda", "John", "Kelly", "Megan", "Henry"];
$asc_array = ["first" => "Amanda", "second" => "John",
              "third" => "Kelly", "fourth" => "Megan",
              "fifth" => "Henry"];

unset($num_array[2]);
print_r($num_array);
/* Output —
Array
(
    [0] => Amanda
    [1] => John
    [3] => Megan
    [4] => Henry
) */

unset($asc_array["third"]);
print_r($asc_array);
/* Output —
Array
(
    [first] => Amanda
    [second] => John
    [fourth] => Megan
    [fifth] => Henry
) */
6 mà chúng tôi muốn xóa. Bạn có thể đặt thành 1 để xóa một phần tử hoặc đặt thành một giá trị cao hơn khác để xóa nhiều phần tử

Sử dụng array_diff() để xóa nhiều phần tử theo giá trị của chúng

Mặc dù

$num_array = ["Amanda", "John", "Kelly", "Megan", "Henry"];
$asc_array = ["first" => "Amanda", "second" => "John",
              "third" => "Kelly", "fourth" => "Megan",
              "fifth" => "Henry"];

unset($num_array[2]);
print_r($num_array);
/* Output —
Array
(
    [0] => Amanda
    [1] => John
    [3] => Megan
    [4] => Henry
) */

unset($asc_array["third"]);
print_r($asc_array);
/* Output —
Array
(
    [first] => Amanda
    [second] => John
    [fourth] => Megan
    [fifth] => Henry
) */
5 có thể xóa nhiều phần tử khỏi bất kỳ phần tử nào cùng một lúc, nhưng nó làm như vậy mà không cần so sánh khóa hoặc giá trị. Một vấn đề khác với
$num_array = ["Amanda", "John", "Kelly", "Megan", "Henry"];
$asc_array = ["first" => "Amanda", "second" => "John",
              "third" => "Kelly", "fourth" => "Megan",
              "fifth" => "Henry"];

unset($num_array[2]);
print_r($num_array);
/* Output —
Array
(
    [0] => Amanda
    [1] => John
    [3] => Megan
    [4] => Henry
) */

unset($asc_array["third"]);
print_r($asc_array);
/* Output —
Array
(
    [first] => Amanda
    [second] => John
    [fourth] => Megan
    [fifth] => Henry
) */
5 là nó sẽ xóa các phần tử sau phần bù một cách tuần tự, do đó bạn sẽ không thể sử dụng nó để xóa các phần tử không liên tiếp

Điều gì sẽ xảy ra nếu bạn muốn xóa các phần tử mảng theo giá trị của chúng và các phần tử đó không được đặt theo thứ tự? . Hàm này được sử dụng để loại bỏ tất cả các phần tử trong mảng đầu tiên cũng có trong mảng thứ hai. Nói cách khác, bạn có thể sử dụng phương pháp này để loại bỏ các phần tử mảng không liên tiếp theo giá trị của chúng một cách dễ dàng. Bạn nên lưu ý rằng các khóa trong mảng thứ hai không quan trọng. Chỉ các giá trị cần khớp để loại bỏ các phần tử

PHP

$num_array = ["Amanda", "John", "Kelly", "Megan", "Henry"];
$asc_array = ["first" => "Amanda", "second" => "John",
              "third" => "Kelly", "fourth" => "Megan",
              "fifth" => "Henry"];

$num_diff = ["Amanda", "Megan"];
$asc_diff = ["bogus_a" => "Amanda", "bogus_b" => "Megan"];

$num_array = array_diff($num_array, $num_diff);
print_r($num_array);
/* Output —
Array
(
    [1] => John
    [2] => Kelly
    [4] => Henry
) */

$asc_array = array_diff($asc_array, $asc_diff);
print_r($asc_array);
/* Output —
Array
(
    [second] => John
    [third] => Kelly
    [fifth] => Henry
) */

Như bạn có thể thấy trong ví dụ trên, bạn có thể sử dụng kỹ thuật này để loại bỏ nhiều phần tử theo giá trị của chúng khỏi mảng số cũng như mảng kết hợp. Một điều mà tôi muốn chỉ ra là các khóa trong mảng thứ hai không nhất thiết phải khớp với mảng đầu tiên để xóa thành công

Sử dụng array_diff_key() để xóa nhiều phần tử mảng bằng khóa của chúng

Giống như bạn sử dụng

$num_array = ["Amanda", "John", "Kelly", "Megan", "Henry"];
$asc_array = ["first" => "Amanda", "second" => "John",
              "third" => "Kelly", "fourth" => "Megan",
              "fifth" => "Henry"];

unset($num_array[2]);
print_r($num_array);
/* Output —
Array
(
    [0] => Amanda
    [1] => John
    [3] => Megan
    [4] => Henry
) */

unset($asc_array["third"]);
print_r($asc_array);
/* Output —
Array
(
    [first] => Amanda
    [second] => John
    [fourth] => Megan
    [fifth] => Henry
) */
9 để xóa nhiều phần tử không liên tiếp khỏi một mảng theo giá trị của chúng, bạn có thể sử dụng hàm array_diff_key() để xóa nhiều phần tử mảng không liên tiếp theo khóa của chúng. Hàm này được sử dụng để xóa tất cả các phần tử khỏi mảng đầu tiên có khóa cũng có trong mảng thứ hai. Bạn lưu ý giá trị ở mảng thứ 2 không quan trọng. Chỉ các phím cần khớp để loại bỏ các phần tử. Đây là một ví dụ

PHP

$num_array = ["Amanda", "John", "Kelly", "Megan", "Henry"];
$num_array_b = ["Amanda", "John", "Kelly", "Megan", "Henry"];
$asc_array = ["first" => "Amanda", "second" => "John",
              "third" => "Kelly", "fourth" => "Megan",
              "fifth" => "Henry"];

$num_diff = [0, 3];
$num_diff_b = [0 => "Bogus", 3 => "Bogus"];
$asc_diff = ["first" => "Bogus", "third" => "Bogus"];

// $num_diff is used as [0 => 0, 1 => 3];
$num_array = array_diff_key($num_array, $num_diff);
print_r($num_array);
/* Output —
Array
(
    [2] => Kelly
    [3] => Megan
    [4] => Henry
) */

$num_array_b = array_diff_key($num_array_b, $num_diff_b);
print_r($num_array_b);
/* Output —
Array
(
    [1] => John
    [2] => Kelly
    [4] => Henry
) */

$asc_array = array_diff_key($asc_array, $asc_diff);
print_r($asc_array);
/* Output —
Array
(
    [second] => John
    [fourth] => Megan
    [fifth] => Henry
) */

Trong ví dụ trên, đầu ra của phép toán

$num_array = ["Amanda", "John", "Kelly", "Megan", "Henry"];
$asc_array = ["first" => "Amanda", "second" => "John",
              "third" => "Kelly", "fourth" => "Megan",
              "fifth" => "Henry"];

unset($num_array[2]);
$reindexed = array_values($num_array);
print_r($reindexed);
/* Output —
Array
(
    [0] => Amanda
    [1] => John
    [2] => Megan
    [3] => Henry
) */

unset($asc_array["third"]);
$reindexed = array_values($asc_array);
print_r($reindexed);
/* Output —
Array
(
    [0] => Amanda
    [1] => John
    [2] => Megan
    [3] => Henry
) */
0 đầu tiên có thể gây ngạc nhiên cho một số bạn. Lúc đầu, có vẻ như chúng ta đang chuyển các phím số của các phần tử để loại bỏ giống như chúng ta phải làm. Tuy nhiên,
$num_array = ["Amanda", "John", "Kelly", "Megan", "Henry"];
$asc_array = ["first" => "Amanda", "second" => "John",
              "third" => "Kelly", "fourth" => "Megan",
              "fifth" => "Henry"];

unset($num_array[2]);
$reindexed = array_values($num_array);
print_r($reindexed);
/* Output —
Array
(
    [0] => Amanda
    [1] => John
    [2] => Megan
    [3] => Henry
) */

unset($asc_array["third"]);
$reindexed = array_values($asc_array);
print_r($reindexed);
/* Output —
Array
(
    [0] => Amanda
    [1] => John
    [2] => Megan
    [3] => Henry
) */
0 biến mảng đơn giản mà chúng ta đã chuyển thành một mảng kết hợp với phần tử 0 tại chỉ mục (hoặc khóa) 0 và phần tử 3 tại chỉ mục (hoặc khóa) 1. Vì vậy, các khóa mà bạn đang chuyển để xóa thực sự trở thành 0 và 1 thay vì 0 và 3 như bạn dự định. Chúng tôi khắc phục tình trạng này bằng cách chuyển các giá trị không có thật cho các khóa 0 và 3 trong trường hợp thứ hai và nhận được đầu ra như mong đợi. Điều này không trở thành vấn đề trong phần trước vì chúng tôi khớp các khóa chứ không phải giá trị

Tóm tắt nhanh

Hãy tóm tắt lại mọi thứ mà chúng tôi đã trình bày trong hướng dẫn này

  1. Nếu bạn muốn xóa một phần tử khỏi mảng tại một thời điểm dựa trên khóa của nó, bạn chỉ cần sử dụng hàm unset(). Chỉ cần nhớ rằng mảng sẽ không được lập chỉ mục lại sau khi xóa phần tử
  2. Giả sử bạn muốn xóa một phần tử khỏi mảng tại một thời điểm dựa trên giá trị của nó. Trong trường hợp này, trước tiên bạn sẽ phải lấy khóa cho giá trị đó bằng cách sử dụng hàm
    $num_array = ["Amanda", "John", "Kelly", "Megan", "Henry"];
    $asc_array = ["first" => "Amanda", "second" => "John",
                  "third" => "Kelly", "fourth" => "Megan",
                  "fifth" => "Henry"];
    
    unset($num_array[2]);
    print_r($num_array);
    /* Output —
    Array
    (
        [0] => Amanda
        [1] => John
        [3] => Megan
        [4] => Henry
    ) */
    
    unset($asc_array["third"]);
    print_r($asc_array);
    /* Output —
    Array
    (
        [first] => Amanda
        [second] => John
        [fourth] => Megan
        [fifth] => Henry
    ) */
    
    2. Khi bạn có khóa, bạn có thể chuyển nó cho hàm unset() để xóa phần tử cụ thể đó
  3. Nếu bạn muốn loại bỏ nhiều phần tử liên tiếp khỏi một mảng cùng một lúc, bạn có thể sử dụng hàm
    $num_array = ["Amanda", "John", "Kelly", "Megan", "Henry"];
    $asc_array = ["first" => "Amanda", "second" => "John",
                  "third" => "Kelly", "fourth" => "Megan",
                  "fifth" => "Henry"];
    
    unset($num_array[2]);
    print_r($num_array);
    /* Output —
    Array
    (
        [0] => Amanda
        [1] => John
        [3] => Megan
        [4] => Henry
    ) */
    
    unset($asc_array["third"]);
    print_r($asc_array);
    /* Output —
    Array
    (
        [first] => Amanda
        [second] => John
        [fourth] => Megan
        [fifth] => Henry
    ) */
    
    5. Một điều quan trọng mà bạn cần nhớ là bạn phải truyền phần bù (không phải khóa hoặc chỉ mục) để chỉ định vị trí mà bạn muốn bắt đầu xóa.
  4. Nếu bạn muốn xóa nhiều phần tử khỏi một mảng nhưng chúng không được đảm bảo liên tiếp, bạn có thể sử dụng hàm
    $num_array = ["Amanda", "John", "Kelly", "Megan", "Henry"];
    $asc_array = ["first" => "Amanda", "second" => "John",
                  "third" => "Kelly", "fourth" => "Megan",
                  "fifth" => "Henry"];
    
    unset($num_array[2]);
    print_r($num_array);
    /* Output —
    Array
    (
        [0] => Amanda
        [1] => John
        [3] => Megan
        [4] => Henry
    ) */
    
    unset($asc_array["third"]);
    print_r($asc_array);
    /* Output —
    Array
    (
        [first] => Amanda
        [second] => John
        [fourth] => Megan
        [fifth] => Henry
    ) */
    
    9 để xóa các phần tử theo giá trị của chúng. Tương tự, bạn có thể sử dụng hàm
    $num_array = ["Amanda", "John", "Kelly", "Megan", "Henry"];
    $asc_array = ["first" => "Amanda", "second" => "John",
                  "third" => "Kelly", "fourth" => "Megan",
                  "fifth" => "Henry"];
    
    unset($num_array[2]);
    $reindexed = array_values($num_array);
    print_r($reindexed);
    /* Output —
    Array
    (
        [0] => Amanda
        [1] => John
        [2] => Megan
        [3] => Henry
    ) */
    
    unset($asc_array["third"]);
    $reindexed = array_values($asc_array);
    print_r($reindexed);
    /* Output —
    Array
    (
        [0] => Amanda
        [1] => John
        [2] => Megan
        [3] => Henry
    ) */
    
    0 để xóa các phần tử theo khóa của chúng

Hãy cho tôi biết nếu có bất cứ điều gì mà bạn muốn tôi làm rõ. Ngoài ra, rất hoan nghênh bạn bình luận nếu bạn biết các kỹ thuật khác để xóa một hoặc nhiều phần tử khỏi một mảng trong PHP

Làm cách nào để xóa nhiều khóa khỏi mảng trong PHP?

Nếu bạn thấy trong tài liệu PHP không có sẵn, hãy trực tiếp xóa nhiều khóa khỏi mảng PHP. Nhưng chúng ta sẽ tạo hàm tùy chỉnh PHP của riêng mình và xóa tất cả các khóa theo giá trị mảng đã cho . Trong ví dụ này, tôi đã tạo hàm tùy chỉnh là array_except().

Làm cách nào để xóa tất cả các khóa khỏi mảng trong PHP?

Sử dụng hàm unset() . Hàm unset() dùng để xóa phần tử khỏi mảng. Hàm unset được sử dụng để hủy bất kỳ biến nào khác và sử dụng tương tự để xóa bất kỳ phần tử nào của một mảng. Lệnh bỏ đặt này lấy khóa mảng làm đầu vào và xóa phần tử đó khỏi mảng.

Làm cách nào để xóa tất cả dữ liệu khỏi mảng trong PHP?

Hàm array_splice() xóa các phần tử đã chọn khỏi một mảng và thay thế nó bằng các phần tử mới. Hàm cũng trả về một mảng với các phần tử đã bị xóa.

Làm cách nào để xóa khóa cuối cùng khỏi mảng trong PHP?

Hàm array_pop() xóa phần tử cuối cùng của một mảng.