Pertanyaan PHP: Hapus elemen dari larik


Apakah ada cara mudah untuk menghapus elemen dari suatu array menggunakan PHP, seperti yang foreach ($array) tidak lagi termasuk elemen itu?

Saya pikir itu pengaturannya null akan melakukannya, tetapi ternyata itu tidak berhasil.


1968
2017-12-15 20:28


asal


Jawaban:


Ada berbagai cara untuk menghapus elemen larik, di mana beberapa lebih bermanfaat untuk beberapa tugas tertentu daripada yang lain.

Hapus satu elemen larik

Jika Anda ingin menghapus hanya satu elemen array yang dapat Anda gunakan unset() atau alternatif array_splice().

Juga jika Anda memiliki nilai dan tidak tahu kunci untuk menghapus elemen yang dapat Anda gunakan array_search() untuk mendapatkan kuncinya.

unset() metode

Perhatikan bahwa ketika Anda menggunakan unset() kunci array tidak akan berubah / reindex. Jika Anda ingin mengindeks ulang kunci yang dapat Anda gunakan array_values() setelah unset() yang akan mengkonversi semua kunci ke kunci yang dihitung numerik mulai dari 0.

Kode

<?php

    $array = array(0 => "a", 1 => "b", 2 => "c");
    unset($array[1]);
               //↑ Key which you want to delete

?>

Keluaran

Array (
    [0] => a
    [2] => c
)

array_splice() metode

Jika Anda menggunakan array_splice() kunci akan secara otomatis diindeks ulang, tetapi kunci asosiatif tidak akan berubah sebagai lawan array_values() yang akan mengkonversi semua kunci ke tombol angka.

Juga array_splice() membutuhkan offset, bukan kuncinya! sebagai parameter kedua.

Kode

<?php

    $array = array(0 => "a", 1 => "b", 2 => "c");
    array_splice($array, 1, 1);
                       //↑ Offset which you want to delete

?>

Keluaran

Array (
    [0] => a
    [1] => c
)

array_splice() sama dengan unset() mengambil array dengan referensi, ini berarti Anda tidak ingin menetapkan nilai kembali dari fungsi-fungsi tersebut kembali ke array.

Hapus beberapa elemen array

Jika Anda ingin menghapus beberapa elemen array dan tidak ingin dipanggil unset() atau array_splice() beberapa kali Anda dapat menggunakan fungsi-fungsi tersebut array_diff() atau array_diff_key() tergantung apakah Anda tahu nilai atau kunci dari elemen yang ingin Anda hapus.

array_diff() metode

Jika Anda tahu nilai elemen array yang ingin Anda hapus, maka Anda bisa menggunakannya array_diff(). Seperti sebelumnya dengan unset() itu tidak akan mengubah / mengindeks ulang kunci dari array.

Kode

<?php

    $array = array(0 => "a", 1 => "b", 2 => "c");
    $array = array_diff($array, ["a", "c"]);
                              //└────────┘→ Array values which you want to delete

?>

Keluaran

Array (
    [1] => b
)

array_diff_key() metode

Jika Anda tahu kunci dari elemen yang ingin Anda hapus, maka Anda ingin menggunakannya array_diff_key(). Di sini Anda harus memastikan Anda memberikan kunci sebagai kunci dalam parameter kedua dan bukan sebagai nilai. Jika tidak, Anda harus membalik array dengan array_flip(). Dan juga di sini kunci tidak akan berubah / reindex.

Kode

<?php

    $array = array(0 => "a", 1 => "b", 2 => "c");
    $array = array_diff_key($array, [0 => "xy", "2" => "xy"]);
                                   //↑           ↑ Array keys which you want to delete
?>

Keluaran

Array (
    [1] => b
)

Juga jika Anda ingin menggunakannya unset() atau array_splice() untuk menghapus beberapa elemen dengan nilai yang sama yang dapat Anda gunakan array_keys() untuk mendapatkan semua kunci untuk nilai tertentu dan kemudian menghapus semua elemen.


2225
2017-12-15 21:25



Perlu dicatat itu unset() akan membuat indeks tetap tidak tersentuh, yang adalah apa yang Anda harapkan ketika menggunakan indeks string (larik sebagai hashtable), tetapi bisa sangat mengejutkan ketika berhadapan dengan bilangan terindeks integer:

$array = array(0, 1, 2, 3);
unset($array[2]);
var_dump($array);
/* array(3) {
  [0]=>
  int(0)
  [1]=>
  int(1)
  [3]=>
  int(3)
} */

$array = array(0, 1, 2, 3);
array_splice($array, 2, 1);
var_dump($array);
/* array(3) {
  [0]=>
  int(0)
  [1]=>
  int(1)
  [2]=>
  int(3)
} */

Begitu array_splice() dapat digunakan jika Anda ingin menormalkan kunci integer Anda. Pilihan lainnya adalah menggunakan array_values() setelah unset():

$array = array(0, 1, 2, 3);

unset($array[2]);
$array = array_values($array);
var_dump($array);
/* array(3) {
  [0]=>
  int(0)
  [1]=>
  int(1)
  [2]=>
  int(3)
} */

1299
2017-08-02 15:57



  // our initial array  
   $arr = array("blue", "green", "red", "yellow", "green", "orange", "yellow", "indigo", "red");  
  print_r($arr);

  // remove the elements who's values are yellow or red  
   $arr = array_diff($arr, array("yellow", "red"));
  print_r($arr);  

Ini adalah output dari kode di atas:

Array
(
    [0] => blue
    [1] => green
    [2] => red
    [3] => yellow
    [4] => green
    [5] => orange
    [6] => yellow
    [7] => indigo
    [8] => red
)

Array
(
    [0] => blue
    [1] => green
    [4] => green
    [5] => orange
    [7] => indigo
)

Sekarang, array_values ​​() akan mengindeks ulang array numerik dengan baik, tetapi akan menghapus semua string kunci dari array dan menggantinya dengan angka. Jika Anda perlu mempertahankan nama kunci (string), atau mengindeks ulang larik jika semua kunci adalah numerik, gunakan array_merge ():

$arr = array_merge(array_diff($arr, array("yellow", "red")));
print_r($arr);

keluaran

Array
(
    [0] => blue
    [1] => green
    [2] => green
    [3] => orange
    [4] => indigo
)

320
2017-11-15 11:29



$key = array_search($needle,$array);
if($key!==false){
    unset($array[$key]);
}

175
2017-12-15 20:31



unset($array[$index]);

58
2017-11-26 08:25



Jika Anda memiliki array yang diindeks secara numerik di mana semua nilai bersifat unik (atau tidak unik tetapi Anda ingin menghapus semua instance dari nilai tertentu), Anda dapat menggunakan array_diff () untuk menghapus elemen yang cocok, seperti ini:

$my_array = array_diff($my_array, array('Value_to_remove'));

Sebagai contoh:

$my_array = array('Andy', 'Bertha', 'Charles', 'Diana');
echo sizeof($my_array) . "\n";
$my_array = array_diff($my_array, array('Charles'));
echo sizeof($my_array);

Ini menampilkan yang berikut:

4
3

Dalam contoh ini, elemen dengan nilai 'Charles' dihapus karena dapat diverifikasi oleh ukuran () panggilan yang melaporkan ukuran 4 untuk array awal, dan 3 setelah penghapusan.


55
2017-07-31 01:06



Juga, untuk elemen bernama:

unset($array["elementName"]);


48
2017-07-19 15:37



Hancurkan satu elemen array

unset()

$array1 = array('A', 'B', 'C', 'D', 'E');
unset($array1[2]); // Delete known index(2) value from array
var_dump($array1);

Outputnya adalah:

array(4) {
  [0]=>
  string(1) "A"
  [1]=>
  string(1) "B"
  [3]=>
  string(1) "D"
  [4]=>
  string(1) "E"
}

Jika Anda perlu mengindeks kembali array:

$array1 = array_values($array1);
var_dump($array1);

Maka hasilnya adalah:

array(4) {
  [0]=>
  string(1) "A"
  [1]=>
  string(1) "B"
  [2]=>
  string(1) "D"
  [3]=>
  string(1) "E"
}

Pop elemen dari ujung array - kembalikan nilai elemen yang dihapus

mixed array_pop(array &$array)

$stack = array("orange", "banana", "apple", "raspberry");
$last_fruit = array_pop($stack);
print_r($stack);
print_r('Last Fruit:'.$last_fruit); // Last element of the array

Outputnya akan

Array
(
    [0] => orange
    [1] => banana
    [2] => apple
)
Last Fruit: raspberry

Hapus elemen pertama (merah) dari array, - mengembalikan nilai elemen yang dihapus

mixed array_shift ( array &$array )

$color = array("a" => "red", "b" => "green" , "c" => "blue");
$first_color = array_shift($color);
print_r ($color);
print_r ('First Color: '.$first_color);

Outputnya adalah:

Array
(
    [b] => green
    [c] => blue
)
First Color: red

26
2018-06-11 05:51



<?php
    $stack = array("fruit1", "fruit2", "fruit3", "fruit4");
    $fruit = array_shift($stack);
    print_r($stack);

    echo $fruit;
?>

Keluaran:

Array
(
    [0] => fruit2
    [1] => fruit3
    [2] => fruit4
)

fruit1

22
2017-09-22 04:01



Untuk menghindari melakukan pencarian, seseorang dapat bermain-main array_diff:

$array = array(3, 9, 11, 20);
$array = array_diff($array, array(11) ); // removes 11

Dalam hal ini seseorang tidak harus mencari / menggunakan kunci.


20
2017-07-26 20:11