Saya tidak ingin jawaban Konrad adalah yang paling sederhana untuk masalah yang dinyatakan. Dengan unset()iterasi pada array tidak akan menyertakan nilai yang dihapus lagi. OTOH, memang benar bahwa jawaban Stevan cukup dan, sebenarnya, adalah jawaban yang saya cari - tetapi bukan OP :)
brandizzi
32
@danip Menjadi mudah ditemukan dalam manual tidak menghalangi pertanyaan tentang StackOverflow. Jika pertanyaannya adalah pertanyaan duplikat StackOverflow, maka itu mungkin bukan di sini. StackOverflow adalah tempat yang baik untuk menemukan jawaban sebagai pilihan masuk bahkan sebelum melihat manual.
Perhatikan bahwa ketika Anda menggunakan unset()kunci array tidak akan berubah / indeks ulang. Jika Anda ingin mengindeks ulang tombol yang dapat Anda gunakan \array_values()setelah unset()itu akan mengkonversi semua kunci menjadi kunci numerik mulai dari 0.
Kode
<?php
$array =[0=>"a",1=>"b",2=>"c"];
unset($array[1]);//↑ Key which you want to delete?>
Jika Anda menggunakan \array_splice()tombol akan secara otomatis diindeks ulang, tetapi kunci asosiatif tidak akan berubah sebagai lawan \array_values()yang akan mengkonversi semua kunci menjadi kunci numerik.
Juga \array_splice()perlu offset, bukan kuncinya! sebagai parameter kedua.
Kode
<?php
$array =[0=>"a",1=>"b",2=>"c"];
\array_splice($array,1,1);//↑ Offset which you want to delete?>
Keluaran
[[0]=> a[1]=> c]
array_splice()sama seperti unset()mengambil array dengan referensi, dan ini berarti Anda tidak ingin menetapkan nilai kembali fungsi-fungsi tersebut kembali ke array.
Hapus beberapa elemen array
Jika Anda ingin menghapus beberapa elemen array dan tidak ingin memanggil unset()atau \array_splice()berkali-kali Anda dapat menggunakan fungsi \array_diff()atau \array_diff_key()tergantung pada apakah Anda tahu nilai-nilai atau kunci elemen yang ingin Anda hapus.
Jika Anda tahu nilai-nilai elemen array yang ingin Anda hapus, maka Anda bisa menggunakan \array_diff(). Seperti sebelumnya dengan unset()itu tidak akan mengubah / mengindeks kembali kunci array.
Kode
<?php
$array =[0=>"a",1=>"b",2=>"c"];
$array = \array_diff($array,["a","c"]);//└────────┘→ Array values which you want to delete?>
Jika Anda tahu kunci elemen yang ingin Anda hapus, maka Anda ingin menggunakannya \array_diff_key(). Di sini Anda harus memastikan bahwa Anda melewatkan kunci sebagai kunci di parameter kedua dan bukan sebagai nilai. Jika tidak, Anda harus membalik array dengan \array_flip(). Dan juga di sini tombol tidak akan berubah / indeks 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?>
Keluaran
[[1]=> b]
Juga jika Anda ingin menggunakan unset()atau \array_splice()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.
@AlexandruRada Tidak, Anda berkata "jangan gunakan ini" - dan itu hanya omong kosong. Anda dapat menggunakan metode ini dengan aman saat Anda memperlakukan array seperti apa adanya - kamus. Hanya jika Anda mengharapkan indeks numerik berurutan Anda perlu menggunakan sesuatu yang lain.
Konrad Rudolph
2
@Alexander Use array_splice, seperti dijelaskan dalam jawaban lain.
Konrad Rudolph
1
@AlexandruRada Tidak ada cara Anda dapat memiliki array (3) { [0]=>int(0) ...ketika Anda unset($x[2])dari $x = array(1, 2, 3, 4);Hasil harus menjadi var_dump($x); // array(3) { [0]=> int(1) [1]=> int(2) [3]=> int(4) }(itu mungkin salah ketik)
inemanja
5
unsetdapat memiliki beberapa argumen: void unset ( mixed $var [, mixed $... ] ).
Константин Ван
3
array_filter juga merupakan metode yang layak. Terutama bagus jika Anda tidak ingin mengubah array tetapi juga tidak reindex yang dapat menjadi masalah dengan json_encode. php.net/manual/en/function.json-encode.php#94157
dotnetCarpenter
1358
Perlu dicatat bahwa unset()akan membuat indeks tidak tersentuh, yang adalah apa yang Anda harapkan ketika menggunakan indeks string (array sebagai hashtable), tetapi bisa sangat mengejutkan ketika berhadapan dengan array yang diindeks integer:
Perlu dicatat bahwa ketika Anda menggunakan array_splice () Anda perlu mengetahui OFFSET, bukan kuncinya, tetapi offset (!) Dari elemen apa pun yang ingin Anda hapus
Tom
18
@ Tom: Untuk array reguler (yang terus-menerus diindeks integer) offset adalah indeks. Di situlah array_splicebisa masuk akal (antara lain).
Stefan Gehrig
5
Ya tentu saja, tetapi hanya sesuatu yang perlu diingat jika Anda mengutak-atik array sebelum menggunakan sambungan
Tom
4
Dari hanya tes dasar untuk menghapus satu ton elemen dari array raksasa, array_splice tampaknya jauh lebih cepat dan kurang intensif memori. Ini sesuai dengan yang saya harapkan: array_values () tampaknya membuat salinan array, sementara array_splice berfungsi di tempat.
Doug Kavendek
4
array_values adalah pendekatan yang berguna ketika Anda menghapus elemen dalam satu lingkaran dan ingin indeks konsisten, tetapi kemudian ingin mengompresnya setelah loop.
Rorrik
370
// 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);
Sekarang, array_values () akan mengindeks ulang array numerik dengan baik, tetapi itu akan menghapus semua string kunci dari array dan menggantinya dengan angka. Jika Anda perlu mempertahankan nama kunci (string), atau memasukkan kembali array jika semua kunci numerik, gunakan array_merge ():
$ get_merged_values = array_merge ($ data ['res'], $ data ['check_res']); ketika saya mencetak print_r ini ($ get_merged_values); ini menampilkan yang berikut. Array ([0] => Array ([menu_code] => 2 [menu_name] => Tanam [menu_order_no] => 1) [1] => Array ([menu_code] => 3 [menu_name] => Baris [menu_order_no] => 2)) Tetapi saya perlu mendapatkan nilai menu_code dan menu_name menggunakan $ get_merged_values ['menu_code'] dan $ get_merged_values ['menu_name'] masing-masing, daripada menggunakan $ get_merged_values [0] [menu_code], $ get_merged_values [0] ] [menu_name]. tolong bantu saya bagaimana melakukan ini?
Akan baik untuk memperjelas bahwa jawaban ini adalah untuk menghapus suatu elemen, ketika Anda tahu nilainya, tetapi bukan kuncinya. Perhatikan bahwa itu hanya menghapus instance nilai pertama; untuk menemukan semua kunci untuk suatu nilai, gunakan array_keys
Jika Anda memiliki array yang diindeks secara numerik di mana semua nilai 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:
Dalam contoh ini, elemen dengan nilai 'Charles' dihapus karena dapat diverifikasi oleh sizeof () panggilan yang melaporkan ukuran 4 untuk array awal, dan 3 setelah penghapusan.
$a = array("A"=>1, "B"=>2, "C"=>"a");print_r($a);unset($a["B"]);print_r($a); memberikan (diformat): Array ( [A] => 1 [B] => 2 [C] => a ), Array ( [A] => 1 [C] => a )
DefenestrationDay
Tampaknya Anda tidak dapat menghapus elemen array yang diindeks oleh string (menghasilkan "Kesalahan fatal: Tidak dapat mengeset offset string"). Saya tidak berpikir ini selalu terjadi, tetapi tentu saja pada PHP 5.3.10 dan mungkin sebelumnya
carpii
6
@carpii PHP dapat menghapus elemen dari array asosiatif. Kesalahan fatal disebabkan ketika Anda mencoba menggunakan unset ($ var ['key']) pada string, bukan array. Misalnya: $ array = array ('test' => 'value', 'another' => ' nilai ',); tidak disetel ($ array ['tes']); // Menghapus elemen "test" dari array seperti yang diharapkan $ array = 'test'; tidak disetel ($ array ['tes']); // Melempar "Kesalahan fatal: Tidak dapat mengeset string offset" seperti yang diharapkan
Lepaskan 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 adalah
Array([0]=> orange
[1]=> banana
[2]=> apple
)LastFruit: raspberry
Hapus elemen pertama (merah) dari array , - kembalikan nilai elemen yang dihapus
The array_shiftulang indeks item kunci jika bilangan bulat itu, jadi itu buruk, sehingga Anda dapat menggunakan ini: stackoverflow.com/a/52826684/1407491
Perhatikan bahwa array_shifthanya dapat menghapus elemen pertama dalam array. sama digunakan array_popuntuk menghapus elemen terakhir dalam array.
Jasir
1
Jawaban hanya berlaku untuk elemen pertama array dan tidak menjawab pertanyaan umum.
sweisgerber.dev
@sebweisgerber Anda benar tetapi saya tidak berpikir itu salah dan perlu mengundurkan diri. Pertanyaannya adalah menghapus elemen yang tidak menyebutkan posisi apa pun.
Saurabh Chandra Patel
27
Untuk menghindari pencarian, Anda dapat bermain-main dengan array_diff:
Jika Anda harus menghapus beberapa nilai dalam array dan entri dalam array itu adalah objek atau data terstruktur, [array_filter][1]adalah taruhan terbaik Anda. Entri-entri yang mengembalikan true dari fungsi callback akan dipertahankan.
Perilaku unset()di dalam suatu fungsi dapat bervariasi tergantung pada jenis variabel apa yang Anda coba hancurkan.
Jika variabel terglobalisasi berada unset()di dalam suatu fungsi, hanya variabel lokal yang dihancurkan. Variabel dalam lingkungan panggilan akan mempertahankan nilai yang sama seperti sebelumnya unset()dipanggil.
<?php
function destroy_foo(){global $foo;
unset($foo);}
$foo ='bar';
destroy_foo();
echo $foo;?>
Jawaban dari kode di atas adalah bilah .
Ke unset()variabel global di dalam suatu fungsi:
<?php
function foo(){
unset($GLOBALS['bar']);}
$bar ="something";
foo();?>
$arr =['a','b','c'];
$index = array_search('a', $arr);// search the value to find indexif($index !==false){
unset($arr[$index]);// $arr = ['b', 'c']}
The ifKondisi ini diperlukan karena jika indextidak ditemukan, unset()akan secara otomatis menghapus elemen pertama dari array yang tidak apa yang kita inginkan
Untuk menghapus beberapa elemen yang berdekatan, gunakan array_splice () :
array_splice($array, $offset, $length);
Penjelasan lebih lanjut:
Menggunakan fungsi-fungsi ini menghapus semua referensi ke elemen-elemen ini dari PHP. Jika Anda ingin menyimpan kunci dalam array, tetapi dengan nilai kosong, tetapkan string kosong ke elemen:
$array[3]= $array['foo']='';
Selain sintaks, ada perbedaan logis antara menggunakan unset () dan menetapkan '' ke elemen. Yang pertama mengatakan This doesn't exist anymore,sementara yang kedua mengatakanThis still exists, but its value is the empty string.
Jika Anda berurusan dengan angka, menetapkan 0 mungkin merupakan alternatif yang lebih baik. Jadi, jika perusahaan menghentikan produksi sproket model XL1000, itu akan memperbarui inventarisnya dengan:
unset($products['XL1000']);
Namun, jika kehabisan sementara sprocket XL1000, tetapi berencana untuk menerima pengiriman baru dari pabrik akhir pekan ini, ini lebih baik:
$products['XL1000']=0;
Jika Anda menghapus () elemen, PHP menyesuaikan array sehingga perulangan masih berfungsi dengan benar. Itu tidak memadatkan array untuk mengisi lubang yang hilang. Inilah yang kami maksud ketika kami mengatakan bahwa semua array adalah asosiatif, bahkan ketika mereka tampak numerik. Ini sebuah 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 errorprint $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 emptyprint $animals[6];// Prints 'gnu', this is where 'gnu' ended up
count($animals);// Returns 6// Assign ''
$animals[2]='';// Zero out valueprint $animals[2];// Prints ''
count($animals);// Returns 6, count does not decrease
Untuk memadatkan array menjadi array numerik yang padat, gunakan array_values () :
$animals = array_values($animals);
Atau, array_splice () secara otomatis mengindeks ulang 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
)
Ini berguna jika Anda menggunakan array sebagai antrian dan ingin menghapus item dari antrian sambil tetap memungkinkan akses acak. Untuk menghapus elemen pertama atau terakhir dengan aman dari array, gunakan array_shift () dan array_pop () , masing-masing.
Saya hanya ingin mengatakan bahwa saya memiliki objek tertentu yang memiliki atribut variabel (pada dasarnya memetakan tabel dan saya mengubah kolom dalam tabel, sehingga atribut dalam objek, yang mencerminkan tabel akan bervariasi 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 describeprotectedfunction 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 $fieldsadalah adil, jadi saya tidak perlu mencari di mana-mana dalam kode ketika mereka diubah, saya hanya melihat di awal kelas dan mengubah daftar atribut dan isi $ array array untuk mencerminkan yang baru atribut.
<?php
$array = array("your array");
$array = array_diff($array,["element you want to delete"]);?>
Buat array Anda di variabel $arraydan kemudian di mana saya telah meletakkan 'elemen yang ingin Anda hapus' Anda meletakkan sesuatu seperti: "a". Dan jika Anda ingin menghapus banyak item, maka: "a", "b".
unset () beberapa, elemen terfragmentasi dari array
Meskipun unset()telah disebutkan di sini beberapa kali, belum disebutkan bahwa unset()menerima beberapa variabel sehingga mudah untuk menghapus beberapa elemen yang tidak bersebelahan dari sebuah array dalam satu operasi:
// Delete multiple, noncontiguous elements from an array
$array =['foo','bar','baz','quz'];
unset( $array[2], $array[3]);
print_r($array);// Output: [ 'foo', 'bar' ]
tidak disetel () secara dinamis
unset () tidak menerima array kunci untuk dihapus, jadi kode di bawah ini akan gagal (itu akan membuatnya sedikit lebih mudah untuk menggunakan unset () meskipun secara dinamis).
Ada juga praktik lain yang belum disebutkan. Terkadang, cara paling sederhana untuk menghilangkan kunci array tertentu adalah dengan cukup menyalin $ array1 ke $ array2.
$array1 = range(1,10);foreach($array1 as $v){// Remove all even integers from the arrayif( $v %2){
$array2[]= $v;}}
print_r($array2);// Output: [ 1, 3, 5, 7, 9 ];
Jelas, praktik yang sama berlaku untuk string teks:
$array1 =['foo','_bar','baz'];foreach($array1 as $v){// Remove all strings beginning with underscoreif( strpos($v,'_')===false){
$array2[]= $v;}}
print_r($array2);// Output: [ 'foo', 'baz' ]
Dua cara untuk menghapus item pertama dari array dengan menjaga urutan indeks dan juga jika Anda tidak tahu nama kunci dari item pertama.
Solusi # 1
// 1 is the index of the first object to get// NULL to get everything until the end// true to preserve keys
$array = array_slice($array,1,null,true);
Solusi # 2
// Rewinds the array's internal pointer to the first element// and returns the value of the first array element.
$value = reset($array);// Returns the index element of the current array position
$key = key($array);
unset($array[$key]);
php5: cukup menjalankan array_pop($arr)menghapus entri terakhir. Tidak perlu `=`.
Chris K
5
<?php
// If you want to remove a particular array element use this method
$my_array = array("key1"=>"value 1","key2"=>"value 2","key3"=>"value 3");
print_r($my_array);if(array_key_exists("key1", $my_array)){
unset($my_array['key1']);
print_r($my_array);}else{
echo "Key does not exist";}?><?php
//To remove first array element
$my_array = array("key1"=>"value 1","key2"=>"value 2","key3"=>"value 3");
print_r($my_array);
$new_array = array_slice($my_array,1);
print_r($new_array);?><?php
echo "<br/> ";// To remove first array element to length// starts from first and remove two element
$my_array = array("key1"=>"value 1","key2"=>"value 2","key3"=>"value 3");
print_r($my_array);
$new_array = array_slice($my_array,1,2);
print_r($new_array);?>
unset()
iterasi pada array tidak akan menyertakan nilai yang dihapus lagi. OTOH, memang benar bahwa jawaban Stevan cukup dan, sebenarnya, adalah jawaban yang saya cari - tetapi bukan OP :)Jawaban:
Ada berbagai cara untuk menghapus elemen array, di mana beberapa lebih berguna untuk beberapa tugas tertentu daripada yang lain.
Hapus satu elemen array
Jika Anda ingin menghapus hanya satu elemen array yang dapat Anda gunakan
unset()
atau sebagai alternatif\array_splice()
.Juga jika Anda memiliki nilai dan tidak tahu kunci untuk menghapus elemen yang dapat Anda gunakan
\array_search()
untuk mendapatkan kunci.unset()
Perhatikan bahwa ketika Anda menggunakan
unset()
kunci array tidak akan berubah / indeks ulang. Jika Anda ingin mengindeks ulang tombol yang dapat Anda gunakan\array_values()
setelahunset()
itu akan mengkonversi semua kunci menjadi kunci numerik mulai dari 0.Kode
Keluaran
\array_splice()
metodeJika Anda menggunakan
\array_splice()
tombol akan secara otomatis diindeks ulang, tetapi kunci asosiatif tidak akan berubah sebagai lawan\array_values()
yang akan mengkonversi semua kunci menjadi kunci numerik.Juga
\array_splice()
perlu offset, bukan kuncinya! sebagai parameter kedua.Kode
Keluaran
array_splice()
sama sepertiunset()
mengambil array dengan referensi, dan ini berarti Anda tidak ingin menetapkan nilai kembali fungsi-fungsi tersebut kembali ke array.Hapus beberapa elemen array
Jika Anda ingin menghapus beberapa elemen array dan tidak ingin memanggil
unset()
atau\array_splice()
berkali-kali Anda dapat menggunakan fungsi\array_diff()
atau\array_diff_key()
tergantung pada apakah Anda tahu nilai-nilai atau kunci elemen yang ingin Anda hapus.\array_diff()
metodeJika Anda tahu nilai-nilai elemen array yang ingin Anda hapus, maka Anda bisa menggunakan
\array_diff()
. Seperti sebelumnya denganunset()
itu tidak akan mengubah / mengindeks kembali kunci array.Kode
Keluaran
\array_diff_key()
metodeJika Anda tahu kunci elemen yang ingin Anda hapus, maka Anda ingin menggunakannya
\array_diff_key()
. Di sini Anda harus memastikan bahwa Anda melewatkan kunci sebagai kunci di parameter kedua dan bukan sebagai nilai. Jika tidak, Anda harus membalik array dengan\array_flip()
. Dan juga di sini tombol tidak akan berubah / indeks ulang.Kode
Keluaran
Juga jika Anda ingin menggunakan
unset()
atau\array_splice()
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.sumber
array_splice
, seperti dijelaskan dalam jawaban lain.array (3) { [0]=>int(0) ...
ketika Andaunset($x[2])
dari$x = array(1, 2, 3, 4);
Hasil harus menjadivar_dump($x); // array(3) { [0]=> int(1) [1]=> int(2) [3]=> int(4) }
(itu mungkin salah ketik)unset
dapat memiliki beberapa argumen:void unset ( mixed $var [, mixed $... ] )
.Perlu dicatat bahwa
unset()
akan membuat indeks tidak tersentuh, yang adalah apa yang Anda harapkan ketika menggunakan indeks string (array sebagai hashtable), tetapi bisa sangat mengejutkan ketika berhadapan dengan array yang diindeks integer:Jadi
array_splice()
dapat digunakan jika Anda ingin menormalkan kunci integer Anda. Opsi lain menggunakanarray_values()
setelahunset()
:sumber
array_splice
bisa masuk akal (antara lain).Ini adalah output dari kode di atas:
Sekarang, array_values () akan mengindeks ulang array numerik dengan baik, tetapi itu akan menghapus semua string kunci dari array dan menggantinya dengan angka. Jika Anda perlu mempertahankan nama kunci (string), atau memasukkan kembali array jika semua kunci numerik, gunakan array_merge ():
Keluaran
sumber
sumber
sumber
Jika Anda memiliki array yang diindeks secara numerik di mana semua nilai 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:
Sebagai contoh:
Ini menampilkan yang berikut:
Dalam contoh ini, elemen dengan nilai 'Charles' dihapus karena dapat diverifikasi oleh sizeof () panggilan yang melaporkan ukuran 4 untuk array awal, dan 3 setelah penghapusan.
sumber
Juga, untuk elemen bernama:
sumber
$a = array("A"=>1, "B"=>2, "C"=>"a");
print_r($a);
unset($a["B"]);
print_r($a);
memberikan (diformat):Array ( [A] => 1 [B] => 2 [C] => a ), Array ( [A] => 1 [C] => a )
Hancurkan satu elemen array
unset()
Outputnya adalah:
Jika Anda perlu mengindeks ulang array:
Maka outputnya adalah:
Lepaskan elemen dari ujung array - kembalikan nilai elemen yang dihapus
mixed array_pop(array &$array)
Outputnya adalah
Hapus elemen pertama (merah) dari array , - kembalikan nilai elemen yang dihapus
mixed array_shift ( array &$array )
Outputnya adalah:
sumber
array_shift
ulang indeks item kunci jika bilangan bulat itu, jadi itu buruk, sehingga Anda dapat menggunakan ini: stackoverflow.com/a/52826684/1407491Keluaran:
sumber
array_shift
hanya dapat menghapus elemen pertama dalam array. sama digunakanarray_pop
untuk menghapus elemen terakhir dalam array.Untuk menghindari pencarian, Anda dapat bermain-main dengan
array_diff
:Dalam hal ini seseorang tidak perlu mencari / menggunakan kunci.
sumber
Jika Anda harus menghapus beberapa nilai dalam array dan entri dalam array itu adalah objek atau data terstruktur,
[array_filter][1]
adalah taruhan terbaik Anda. Entri-entri yang mengembalikan true dari fungsi callback akan dipertahankan.sumber
Array asosiatif
Untuk array asosiatif, gunakan
unset
:Array angka
Untuk susunan numerik, gunakan
array_splice
:Catatan
Menggunakan
unset
array numerik tidak akan menghasilkan kesalahan, tetapi akan mengacaukan indeks Anda:sumber
Jika Anda perlu menghapus beberapa elemen dari array asosiatif, Anda dapat menggunakan array_diff_key () (di sini digunakan dengan array_flip () ):
Keluaran:
sumber
unset()
menghancurkan variabel yang ditentukan.Perilaku
unset()
di dalam suatu fungsi dapat bervariasi tergantung pada jenis variabel apa yang Anda coba hancurkan.Jika variabel terglobalisasi berada
unset()
di dalam suatu fungsi, hanya variabel lokal yang dihancurkan. Variabel dalam lingkungan panggilan akan mempertahankan nilai yang sama seperti sebelumnyaunset()
dipanggil.Jawaban dari kode di atas adalah bilah .
Ke
unset()
variabel global di dalam suatu fungsi:sumber
sumber
Jika indeks ditentukan:
Jika indeks TIDAK ditentukan:
The
if
Kondisi ini diperlukan karena jikaindex
tidak ditemukan,unset()
akan secara otomatis menghapus elemen pertama dari array yang tidak apa yang kita inginkansumber
Solusi:
Penjelasan lebih lanjut:
Menggunakan fungsi-fungsi ini menghapus semua referensi ke elemen-elemen ini dari PHP. Jika Anda ingin menyimpan kunci dalam array, tetapi dengan nilai kosong, tetapkan string kosong ke elemen:
Selain sintaks, ada perbedaan logis antara menggunakan unset () dan menetapkan '' ke elemen. Yang pertama mengatakan
This doesn't exist anymore,
sementara yang kedua mengatakanThis still exists, but its value is the empty string.
Jika Anda berurusan dengan angka, menetapkan 0 mungkin merupakan alternatif yang lebih baik. Jadi, jika perusahaan menghentikan produksi sproket model XL1000, itu akan memperbarui inventarisnya dengan:
Namun, jika kehabisan sementara sprocket XL1000, tetapi berencana untuk menerima pengiriman baru dari pabrik akhir pekan ini, ini lebih baik:
Jika Anda menghapus () elemen, PHP menyesuaikan array sehingga perulangan masih berfungsi dengan benar. Itu tidak memadatkan array untuk mengisi lubang yang hilang. Inilah yang kami maksud ketika kami mengatakan bahwa semua array adalah asosiatif, bahkan ketika mereka tampak numerik. Ini sebuah contoh:
Untuk memadatkan array menjadi array numerik yang padat, gunakan array_values () :
Atau, array_splice () secara otomatis mengindeks ulang array untuk menghindari meninggalkan lubang:
Ini berguna jika Anda menggunakan array sebagai antrian dan ingin menghapus item dari antrian sambil tetap memungkinkan akses acak. Untuk menghapus elemen pertama atau terakhir dengan aman dari array, gunakan array_shift () dan array_pop () , masing-masing.
sumber
Misalkan Anda memiliki array berikut:
Untuk menghapus
storage
, lakukan:Dan Anda mendapatkan:
sumber
array_filter
?Saya hanya ingin mengatakan bahwa saya memiliki objek tertentu yang memiliki atribut variabel (pada dasarnya memetakan tabel dan saya mengubah kolom dalam tabel, sehingga atribut dalam objek, yang mencerminkan tabel akan bervariasi juga):
Seluruh tujuan
$fields
adalah adil, jadi saya tidak perlu mencari di mana-mana dalam kode ketika mereka diubah, saya hanya melihat di awal kelas dan mengubah daftar atribut dan isi $ array array untuk mencerminkan yang baru atribut.sumber
Ikuti fungsi default:
saya)
ii)
aku aku aku)
iv)
sumber
Buat array Anda di variabel
$array
dan kemudian di mana saya telah meletakkan 'elemen yang ingin Anda hapus' Anda meletakkan sesuatu seperti: "a". Dan jika Anda ingin menghapus banyak item, maka: "a", "b".sumber
Gunakan array_search untuk mendapatkan kunci dan menghapusnya dengan tidak disetel jika ditemukan:
sumber
unset () beberapa, elemen terfragmentasi dari array
Meskipun
unset()
telah disebutkan di sini beberapa kali, belum disebutkan bahwaunset()
menerima beberapa variabel sehingga mudah untuk menghapus beberapa elemen yang tidak bersebelahan dari sebuah array dalam satu operasi:tidak disetel () secara dinamis
unset () tidak menerima array kunci untuk dihapus, jadi kode di bawah ini akan gagal (itu akan membuatnya sedikit lebih mudah untuk menggunakan unset () meskipun secara dinamis).
Sebaliknya, unset () dapat digunakan secara dinamis dalam loop foreach:
Hapus kunci array dengan menyalin array
Ada juga praktik lain yang belum disebutkan. Terkadang, cara paling sederhana untuk menghilangkan kunci array tertentu adalah dengan cukup menyalin $ array1 ke $ array2.
Jelas, praktik yang sama berlaku untuk string teks:
sumber
Hapus elemen array berdasarkan pada kunci:
Gunakan
unset
fungsi seperti di bawah ini:Hapus elemen array berdasarkan nilai:
Gunakan
array_search
fungsi untuk mendapatkan kunci elemen dan gunakan cara di atas untuk menghapus elemen array seperti di bawah ini:sumber
Dua cara untuk menghapus item pertama dari array dengan menjaga urutan indeks dan juga jika Anda tidak tahu nama kunci dari item pertama.
Solusi # 1
Solusi # 2
Untuk data sampel ini:
Anda harus memiliki hasil ini:
sumber
Gunakan kode berikut:
sumber
array_pop($arr)
menghapus entri terakhir. Tidak perlu `=`.Keluaran
sumber
Untuk array asosiatif, dengan kunci non-integer:
Sederhananya,
unset($array[$key])
akan berhasil.Untuk array memiliki kunci integer dan jika Anda ingin mempertahankan kunci Anda:
$array = [ 'mango', 'red', 'orange', 'grapes'];
array_splice($array, 2, 1);
sumber
Ini dapat membantu ...
Hasilnya adalah:
sumber
sumber