Menghapus sebuah elemen dari sebuah array di PHP

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

Saya berpikir bahwa pengaturan untuk null akan melakukan hal itu, tetapi tampaknya tidak bekerja.

Mengomentari pertanyaan (6)
Larutan

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

Menghapus satu elemen array

Jika anda ingin menghapus salah satu elemen array, anda dapat menggunakan \unset() atau \array_splice().

Juga jika anda memiliki nilai dan don't tahu kunci untuk menghapus elemen yang dapat anda gunakan \array_search() untuk mendapatkan kunci.

\unset() metode

Perhatikan bahwa ketika anda menggunakan \unset() kunci array won't perubahan/daftar ulang. Jika anda ingin reindex tombol anda dapat menggunakan \array_values() setelah \unset() yang akan mengkonversi semua kunci numerik dihitung tombol mulai dari 0.

Kode

<?php

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

?>

Output

[
    [0] => a
    [2] => c
]

\array_splice() metode

Jika anda menggunakan \array_splice() tombol akan secara otomatis reindexed, tapi asosiatif kunci won't perubahan, sebagai lawan dari \array_values() yang akan mengkonversi semua tombol ke tombol numerik.

Juga \array_splice() kebutuhan offset, tidak penting! sebagai parameter kedua.

Kode

<?php

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

?>

Output

[
    [0] => a
    [1] => c
]

array_splice() sama seperti \unset() mengambil array dengan referensi, dan ini berarti anda don't ingin menetapkan kembali nilai-nilai dari fungsi-fungsi itu kembali ke hotel.

Menghapus beberapa elemen array

Jika anda ingin menghapus beberapa elemen array dan don't ingin menelepon \unset() atau \array_splice() beberapa kali anda dapat menggunakan fungsi \array_diff() atau \array_diff_key() tergantung pada apakah anda tahu nilai-nilai atau kunci dari unsur-unsur yang ingin anda hapus.

\array_diff() metode

Jika anda tahu nilai dari elemen array yang ingin anda hapus, kemudian anda dapat menggunakan \array_diff(). Seperti sebelumnya dengan \unset() tidak't perubahan/daftar ulang kunci dari array.

Kode

<?php

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

?>

Output

[
    [1] => b
]

\array_diff_key() metode

Jika anda tahu kunci dari unsur-unsur yang ingin anda hapus, kemudian anda ingin menggunakan \array_diff_key(). Di sini anda harus memastikan anda melewati kunci tombol di kedua parameter dan bukan sebagai nilai-nilai. Jika tidak, anda harus membalik array \array_flip(). Dan juga di sini kunci won't perubahan/daftar ulang.

Kode

<?php

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

Output

[
    [1] => b
]

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

Komentar (9)

Perlu dicatat bahwa unset() akan membuat indeks tak tersentuh, yang adalah apa yang anda'd harapkan ketika menggunakan string index (array sebagai hashtable), tetapi dapat cukup mengejutkan ketika berhadapan dengan integer array diindeks:

$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)
} */

Jadi array_splice() dapat digunakan jika anda'd seperti untuk menormalkan integer kunci. Pilihan lain 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)
} */
Komentar (8)
  // 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 reindex numerik array dengan baik, tapi itu akan menghapus semua kunci string dari array dan menggantinya dengan angka-angka. Jika anda perlu untuk melestarikan kunci nama (string), atau reindex array jika semua kunci numerik, gunakan array_merge():

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

Output

Array
(
    [0] => blue
    [1] => green
    [2] => green
    [3] => orange
    [4] => indigo
)
Komentar (1)
$key = array_search($needle, $array);
if ($key !== false) {
    unset($array[$key]);
}
Komentar (1)
unset($array[$index]);
Komentar (0)

Jika anda memiliki sebuah array berindeks numerik di mana semua nilai-nilai yang unik (atau mereka yang non-unik tapi anda ingin menghapus semua contoh dari nilai tertentu), anda hanya dapat menggunakan array_diff() untuk menghapus pencocokan elemen, seperti ini:

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

Misalnya:

$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 akan menampilkan berikut ini:

4
3

Dalam contoh ini, elemen dengan nilai 'Charles' dihapus karena dapat diverifikasi oleh sizeof() menyebut laporan itu ukuran 4 untuk awal array, dan 3 setelah penghapusan.

Komentar (0)

Juga, untuk sebuah nama unsur:

unset($array["elementName"]);
Komentar (4)

Menghancurkan satu elemen dari sebuah array

unset()

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

Output akan sama:

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

Jika anda perlu untuk kembali index array:

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

Maka output akan sama:

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

Pop elemen dari array - mengembalikan nilai elemen dihapus

campuran 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

Output akan

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

Menghapus elemen pertama (merah) dari array, - return nilai dari elemen dihapus

campuran 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);

Output akan sama:

Array
(
    [b] => green
    [c] => blue
)
First Color: red
Komentar (1)
<?php
    $stack = ["fruit1", "fruit2", "fruit3", "fruit4"];
    $fruit = array_shift($stack);
    print_r($stack);

    echo $fruit;
?>

Output:

[
    [0] => fruit2
    [1] => fruit3
    [2] => fruit4
]

fruit1
Komentar (3)

Untuk menghindari melakukan pencarian satu dapat bermain-main dengan array_diff:

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

Dalam hal ini salah satu doesn't harus mencari/menggunakan kunci.

Komentar (0)

Array asosiatif

Untuk array asosiatif, gunakan diset:

$arr = array('a' => 1, 'b' => 2, 'c' => 3);
unset($arr['b']);

// RESULT: array('a' => 1, 'c' => 3)

Numeric array

Untuk numerik array, gunakan array_splice:

$arr = array(1, 2, 3);
array_splice($arr, 1, 1);

// RESULT: array(0 => 1, 1 => 3)

Catatan

Menggunakan diset untuk numerik array tidak akan menghasilkan kesalahan, tapi itu akan mengacaukan indeks anda:

$arr = array(1, 2, 3);
unset($arr[1]);

// RESULT: array(0 => 1, 2 => 3)
Komentar (0)

Jika anda harus menghapus beberapa nilai-nilai dalam array dan entri dalam array adalah objek atau data terstruktur, [array_filter][1] adalah taruhan terbaik anda. Entri yang kembali yang benar dari fungsi callback akan dipertahankan.

$array = [
    ['x'=>1,'y'=>2,'z'=>3], 
    ['x'=>2,'y'=>4,'z'=>6], 
    ['x'=>3,'y'=>6,'z'=>9]
];

$results = array_filter($array, function($value) {
    return $value['x'] > 2;  
}); //=> [['x'=>3,'y'=>6,z=>'9']]
Komentar (0)

Jika anda perlu untuk menghapus beberapa elemen dari array asosiatif, anda dapat menggunakan array_diff_key() (di sini digunakan dengan array_flip()):

$my_array = array(
  "key1" => "value 1",
  "key2" => "value 2",
  "key3" => "value 3",
  "key4" => "value 4",
  "key5" => "value 5",
);

$to_remove = array("key2", "key4");

$result = array_diff_key($my_array, array_flip($to_remove));

print_r($result);

Output:

Array ( [key1] => value 1 [key3] => value 3 [key5] => value 5 ) 
Komentar (1)

unset() menghancurkan ditentukan variabel-variabel.

Perilaku unset() dalam sebuah fungsi dapat bervariasi tergantung pada jenis variabel yang anda mencoba untuk menghancurkan.

Jika variabel global adalah unset() dalam sebuah fungsi, hanya variabel lokal hancur. Variabel dalam pemanggilan lingkungan akan mempertahankan nilai yang sama seperti sebelumnya unset() disebut.

<?php
    function destroy_foo()
    {
        global $foo;
        unset($foo);
    }

    $foo = 'bar';
    destroy_foo();
    echo $foo;
?>

Jawaban dari kode di atas akan menjadi bar.

Untuk unset() global variabel dalam sebuah fungsi:

<?php
    function foo()
    {
        unset($GLOBALS['bar']);
    }

    $bar = "something";
    foo();
?>
Komentar (0)
// Remove by value
function removeFromArr($arr, $val)
{
    unset($arr[array_search($val, $arr)]);
    return array_values($arr);
}
Komentar (0)

Solusi:

  1. Untuk menghapus salah satu elemen, gunakan unset():

unset($array3); unset($array['foo']);

  1. Untuk menghapus beberapa noncontiguous unsur-unsur, juga menggunakan unset():

unset($array3, $array5); unset($array['foo'], $array['bar']);

  1. Untuk menghapus beberapa elemen bersebelahan, gunakan array_splice():

array_splice($array, $offset, $panjang);

Penjelasan lebih lanjut:

Menggunakan fungsi-fungsi ini akan menghapus semua referensi ke elemen-elemen ini dari PHP. Jika anda ingin menyimpan key dalam array, tetapi dengan nilai kosong, menetapkan string kosong untuk unsur:

$array[3] = $array['foo'] = '';

Selain sintaks, ada's logis perbedaan antara menggunakan unset() dan menetapkan '' unsur. Yang pertama mengatakan Ini doesn&#39;t ada lagi, sedangkan yang kedua mengatakan Ini masih ada, tapi nilainya adalah string kosong.

Jika anda're berurusan dengan angka-angka, menugaskan 0 dapat menjadi alternatif yang lebih baik. Jadi, jika perusahaan menghentikan produksi dari model XL1000 sprocket, itu akan memperbarui persediaan dengan:

unset($products['XL1000']);

Namun, jika untuk sementara berlari keluar dari XL1000 sprocket, tapi berencana untuk menerima kiriman baru dari pabrik pada akhir pekan ini, ini lebih baik:

$products['XL1000'] = 0;

Jika anda unset() unsur, PHP menyesuaikan array sehingga perulangan tetap bekerja dengan benar. Itu doesn't compact array untuk mengisi hilang lubang. Ini adalah apa yang kita maksud ketika kita mengatakan bahwa semua array asosiatif, bahkan ketika mereka muncul untuk menjadi numerik. Berikut ini's contoh:

// Create a "numeric" array
$animals = array('ant', 'bee', 'cat', 'dog', 'elk', 'fox');
print $animals[1];  // Prints 'bee'
print $animals[2];  // Prints 'cat'
count($animals);    // Returns 6

// unset()
unset($animals[1]); // Removes element $animals[1] = 'bee'
print $animals[1];  // Prints '' and throws an E_NOTICE error
print $animals[2];  // Still prints 'cat'
count($animals);    // Returns 5, even though $array[5] is 'fox'

// Add a new element
$animals[ ] = 'gnu'; // Add a new element (not Unix)
print $animals[1];  // Prints '', still empty
print $animals[6];  // Prints 'gnu', this is where 'gnu' ended up
count($animals);    // Returns 6

// Assign ''
$animals[2] = '';   // Zero out value
print $animals[2];  // Prints ''
count($animals);    // Returns 6, count does not decrease

Untuk compact array menjadi padat diisi numeric array, gunakan array_values():

$animals = array_values($animals);

Atau, array_splice() secara otomatis reindexes array untuk menghindari meninggalkan lubang:

// Create a "numeric" array
$animals = array('ant', 'bee', 'cat', 'dog', 'elk', 'fox');
array_splice($animals, 2, 2);
print_r($animals);
Array
(
    [0] => ant
    [1] => bee
    [2] => elk
    [3] => fox
)

Hal ini berguna jika anda're menggunakan array sebagai sebuah antrian dan ingin menghapus item dari antrian sementara masih memungkinkan akses acak. Untuk menghapus aman pertama atau elemen terakhir dari array, gunakan array_shift() dan array_pop(), masing-masing.

Komentar (0)

I'd hanya ingin mengatakan saya memiliki objek tertentu yang memiliki variabel atribut (itu pada dasarnya pemetaan meja dan aku mengubah kolom pada tabel, sehingga atribut pada objek, yang mencerminkan meja akan berbeda juga):

class obj {
    protected $fields = array('field1','field2');
    protected $field1 = array();
    protected $field2 = array();
    protected loadfields(){}
    // This will load the $field1 and $field2 with rows of data for the column they describe
    protected function clearFields($num){
        foreach($fields as $field) {
            unset($this->$field[$num]);
            // This did not work the line below worked
            unset($this->{$field}[$num]); // You have to resolve $field first using {}
        }
    }
}

Seluruh tujuan dari $field hanya, jadi saya don't harus melihat di mana-mana dalam kode ketika mereka're berubah, saya hanya melihat awal dari kelas dan mengubah daftar dari atribut dan $bidang array konten untuk mencerminkan atribut baru.

Komentar (0)

Misalkan anda memiliki array berikut:

Array
(
    [user_id] => 193
    [storage] => 5
)

Untuk menghapus storage, lakukan:

unset($attributes['storage']);
$attributes = array_filter($attributes);

Dan anda mendapatkan:

Array
(
    [user_id] => 193
)
Komentar (2)

Ikuti default fungsi:

i)

$Array = array("test1", "test2", "test3", "test3");

unset($Array[2]);

ii)

$Array = array("test1", "test2", "test3", "test3");

array_pop($Array);

iii)

$Array = array("test1", "test2", "test3", "test3");

array_splice($Array,1,2);

iv)

$Array = array("test1", "test2", "test3", "test3");

array_shift($Array);
Komentar (0)
<?php
    $array = array("your array");
    $array = array_diff($array, ["element you want to delete"]);
?>

Membuat array dalam variabel $array dan kemudian di mana saya telah menempatkan 'elemen yang ingin anda hapus' anda menempatkan sesuatu seperti: "a". Dan jika anda ingin menghapus beberapa item kemudian: "a", "b".

Komentar (0)