PHP: öğeyi diziden kaldırın. PHP dizisindeki bir öğeyi kaldırma

Bu görev birkaç yolla çözülebilir.

Yöntem 1. Başka bir diziye kopyala eşit elemanlar.

sabit N = 20; var a, b: tamsayı dizisi [1 .. N]; i, m: bayt; rastgele başlayın; i için: = 1'den N'ye a [i]: = rastgele (40) + 10; yaz (a [i]: 3); son; writeln; m: = 0; i için: = 1'den N'ye eğer bir [i] mod 2<>0 sonra m'yi başlatın: = m + 1; b [m]: = bir [i]; son; i için: = 1'den m'ye yazmaya başlayın (b [i]: 3); son; writeln; son.

Bu, dizi öğelerini kaldırmanın en basit yoludur (içinde bu durum hatta sayılar), çünkü orijinal diziyi sıkıştırmaya gerek yoktur. Yukarıda sunulan problemin çözümünde, m değişkeni bulunan tek elemanların sayısını saklar ve aynı zamanda ikinci diziyi doldururken elemanların değişen indeksidir.

Yöntem 2. Geçerli dizideki çift öğeleri, sağdaki tek öğelerin üzerine yazarak silin.

sabit N = 10; var a: tamsayı dizisi [1 .. N]; i, k, m: bayt; rastgele başlayın; i için: = 1'den N'ye a [i]: = rastgele (40) + 10; (a [i]: 3) sonu yaz; writeln; ben: = 1; m: = N; ben iken<= m do if a[ i] mod 2 = 0 then begin m : = m- 1 ; for k: = i to m do a[ k] : = a[ k+ 1 ] ; end else i : = i+ 1 ; for i: = 1 to m do write (a[ i] : 3 ) ; writeln ; end .

Sorunu çözmenin bu yolu daha karmaşıktır. Burada, eğer bir çift elemanla karşılaşılırsa, dizinin geri kalanının tamamı bir hücre ileriye kaydırılır. Bu durumda, bulunan çift öğenin üzerine yazılır. Dizideki eleman sayısı azaldıkça m değişkeni azalır.

Bu yöntem en rasyonel olarak kabul edilmelidir (ancak okul kursunda açık diziler çalışılmayabilir). Önceki sürümlerde aslında diziler küçültülmüyordu, ekranda dizinin sadece bir kısmı gösteriliyordu. Orijinal diziyi basitçe yinelemek, onunla hiçbir şey yapmamak ve ekranda yalnızca tek öğeleri görüntülemek mümkün olacaktır.

Açık bir dizi, uzunluğunu değiştirmenize izin verir. Aşağıdaki problemin çözümünde, tek elemanlar kaydırıldıktan ve tek olanlar "üzerine yazıldıktan" sonra, dizinin uzunluğu değiştirilir (setlength prosedürü kullanılarak). Dizinin yeni uzunluğunu ayarlar. Pascal'daki açık dizilerin özelliği, indekslemelerinin sıfırdan başlamasıdır.

sabit N = 10; var a: tamsayı dizisi; i, j, m: bayt; rastgele başlayın; SetLength (a, N); i için: = 0 ila N- 1 başlar a [i]: = rastgele (40) + 10; yaz (a [i]: 3); son; writeln; ben: = 0; // ilk elemanın indeksi m: = n-1; // son dizinin indeksi ben iken<= m do if a[ i] mod 2 = 0 then begin for j : = i to m- 1 do a[ j] : = a[ j+ 1 ] ; m : = m - 1 end else i : = i + 1 ; SetLength(a, m+ 1 ) ; // son elemanın m indeksi var ama m + 1 eleman var i için: = 0'dan m'ye yaz (a [i]: 3); writeln; son.

Program kodunu yürütmeye bir örnek.

Dizilerle çalışma işlevleri ve dizilerdeki işlemler (Bölüm 2)

Dizileri birleştirme

Dizileri birleştirme (birleştirme) diğer birkaç dizinin öğelerinden oluşan bir dizi oluşturma işlemidir. Dizileri birleştirmek çok tehlikeli bir işlemdir, çünkü birleştirmenin sonucu kendi mantığına uyar ve hangi verileri kaybedebileceğinizi unutur. Dizilerin birleştirilmesi, " + "veya işlevi kullanarak Birleştirme yalnızca işlev kullanılarak gerçekleştirilebilir dizi_birleştirme ().

Diyelim ki iki dizimiz var:

$ A = dizi ("1" => "Birinci", "2" => "İkinci");
$ B = dizi ("3" => "Üçüncü", "4" => "Dördüncü");

Şimdi bu iki diziyi tek bir dizide birleştirelim $ C:

Şebeke " + "diziler için değişmeli değildir. Bunun anlamı şudur: $A + $B eşit değil $B + $A.

Ele alınan örneğin bir sonucu olarak, bir dizi alacağız $ C aşağıdaki gibi:

"1" => "Birinci", "2" => "İkinci", "3" => "Üçüncü", "4" => "Dördüncü"

Ve sonuç olarak $B + $Aşöyle bir dizi elde ederiz:

"3" => "Üçüncü", "4" => "Dördüncü", "1" => "Birinci", "2" => "İkinci"

Listeleri birleştirirken bu yöntem çalışmaz. Bu gerçeği bir örnekle açıklayalım:

Diyelim ki iki dizimiz var:

$ A = dizi (10,11,12);
$ B = dizi (13,14,15);

Listelerin birleştirilmesi sonucunda $ Bir ve $B ($A + $B) elde ederiz: 10,11,12. Ve bu hiç de elde etmek istediğimiz sonuç değil ... Bunun nedeni, aynı endekslere sahip listeleri birleştirirken, ilk dizinin bir öğesinin sonuçtaki dizide ve aynı yerde kalmasıdır. Bu durumda, işlevi kullanmamız gerekir.

Fonksiyonun kullanımına bir örnek saymak ():

$ dizi = 5;
$ dizi = 4;
$ dizi = 8;
$ dizi = 3;
$ dizi = 8;
Eko "

Dizi öğelerinin sayısı: "... say ($ dizi). "

" ;
// Çıktılar: Dizi elemanlarının sayısı: 5
?>

Bir diziyi ve öğelerini kaldırma

Tüm bir diziyi silmek istiyorsanız, işlevi kullanın. ayarla ().

Bir anahtar/değer çiftini kaldırmak isterseniz, işlevi de kullanabilirsiniz. ayarla ()... verelim özel örnekler:

$ dizi = dizi (5 => 1, 12 => 2);

$ dizi = 56; // Komut dosyasının bu noktasında, bu
// $ diziye eşdeğer = 56;

$ dizi ["x"] = 42; // Bu, diziye yeni bir tane ekler
// "x" anahtarlı eleman
PHP portalı forumu. SU

Dizi, herhangi bir programlama dilinde en kullanışlı ve yaygın olarak kullanılan veri yapılarından biridir. Dizileri ve elemanlarını yönetebilmek çok önemli ve kullanışlıdır. Bu yazıda, PHP'de bir dizinin tek tek öğelerini nasıl kaldırabileceğinize bakacağız.

Bu görev, kaldırılan öğe hakkında bildiklerimize bağlı olarak farklı şekillerde gerçekleştirilebilir - anahtarın (dizideki öğenin numarası veya tanımlayıcısı) biliniyor mu yoksa yalnızca değeri mi biliniyor.

Bir dizideki bir öğeyi anahtarıyla kaldırma

Elemanın anahtarını biliyorsanız, görev çok basittir. İşlev ayarla () bir dizi öğesini veya herhangi bir değişkeni silmenize olanak tanır (değişken için kullanılan bilgisayar belleği de temizlenir).

Örneğin, bir dizimiz var:

$ myArr = dizi (1,2,3,4,5);

"3" değerine sahip bir öğeyi kaldırmak için aşağıdaki kodu kullanın:

ayarlanmadı ($ myArr);

Lütfen (3) değerinin değil, bu durumda 0'dan başlayan (2) öğesinin anahtarının belirtildiğini unutmayın. Bu nedenle, dizinin ilk öğesini silmeniz gerekirse, sıfırı belirtiriz. eleman:

ayarlanmadı ($ myArr);

İki silme işleminden sonra dizinin artık üç öğe içerdiğini de dikkate almaya değer:

Dizi
=> 2
=> 4
=> 5
)

Kalan öğelerin tüm anahtarları korunur. Buna göre, eğer şimdi ilk elemanı silmek gerekiyorsa, o zaman bir tanesini anahtar olarak belirtmek gerekecektir. Bu nedenle, dizideki elemanın sayısını her zaman bilmeyip sadece değerlerini bildiğimiz için bu seçenek uygun olmayabilir.

Bir dizi öğesini değerine göre kaldırma

Eğer elemanın anahtarı bilinmiyorsa ve sadece dizinin değeri biliniyorsa, o zaman dizinin tüm elemanlarını bir döngü ile yinelemeniz ve istediğinizi silmeniz gerekecektir. Örneğin, "3" değerine sahip öğeyi kaldıralım:

$ myArr = dizi (1,2,3,4,5);
foreach ($ myArr as $ key => $ item) (
if ($ öğe == 3) (
unset ($ myArr [$ key]);
}
}

* Koşulun $ item değişkenindeki döngüde mevcut dizi değerini kontrol ettiğini ve silerken item anahtarının ($ anahtar değişkeni) belirtildiğini unutmayın.

Bu algoritma, aynı anda bir grup öğeyi silmeniz gerektiğinde de uygundur. Sonuçta, hangi öğelerin silineceğini belirleyen bir koşul var.

Kesişen dizi öğelerini kaldırma

PHP'nin kullanışlı özelliklerinden biri, diğer dizilerin öğeleriyle kesişmeyen öğelerden bir dizi elde etme yeteneğidir. Bunu yapmak için işlevi kullanın dizi_diff(). Dizileri parametre olarak alır ve yeni bir dizi döndürür. Örneğin, yalnızca $ myArr2 dizisine dahil olmayan öğelere ihtiyaç duyduğumuz $ myArr adlı bir başlangıç ​​dizisi vardır:

$ myArr = dizi (1,2,3,4,5);
$ myArr2 = dizi (3,4);

Fonksiyonu uygulayarak dizi_diff(), yalnızca gerekli öğeleri içeren yeni bir dizi elde ederiz:

$ resArr = array_diff ($ myArr, myArr2);

Sonuç olarak, $ resArr şunları içerecektir:

Dizi
=> 1
=> 2
=> 5
)

* Burada yeni bir dizi oluştururken anahtarların kaydedilmesine dikkat etmekte fayda var. Ayrıca seçimin sadece ilk diziden geldiğini bilmekte fayda var. Dolayısıyla, $ myArr2'de başka benzersiz öğeler varsa, örneğin "6" veya "7", bu, sonucu hiçbir şekilde etkilemez - bunlar yeni diziye eklenmez.

beşinci yer - altıncı.

X [3]: = X [4];

X [4]: ​​​​= X [5];

X [5]: = X [6];

Bu nedenle, üçüncüden beşinciye kadar olan tüm öğeler birer birer sola taşınmalıdır - i-inci öğenin yerine (i + 1) -th yazmanız gerekir. Algoritmanın blok diyagramı Şekil 1 de gösterilmektedir. 5.25.


Pirinç. 5.25.


Pirinç. 5.26.


Pirinç. 5.27.

Şimdi daha genel bir problemi ele alalım: n elemandan oluşan X dizisinden m -inci elemanı çıkarmak gerekiyor. Bunu yapmak için, m numaralı öğenin yerine (m + 1) -th öğesini, (m + 2) -th öğesini - (m + 1) -th, vb., n - yerine yazmanız yeterlidir. inci eleman - yerinde (n – 1) th. Bir diziden bir elemanın çıkarılması işlemi Şekil 2'de gösterilmektedir. 5.26.

n boyutlu bir dizi X dizisinden m numaralı bir elemanı çıkarma algoritması Şekil 2'de gösterilmiştir. 5.27.

4. maddeyi çıkardıktan sonra Ve aslında, dizinin bir kısmını bir eleman sola kaydırmak diziden itibaren dizideki elemanların sayısı değişecek (bir azalacak) ve bazı elemanların indeksi değişecektir. Bir öğe silinirse, yerine bir sonraki gelir, ona taşınmaya gerek yoktur (dizini birer birer artırarak). Bir sonraki öğe, kaldırıldıktan sonra sola taşındı.

Bazı öğelerinin silindiği bir dizi işleniyorsa, bir öğeyi sildikten sonra bir sonrakine gitmeniz gerekmez (bu, öğe sayısını azaltır). Aşağıdaki problemi örnek olarak düşünün.

SORUN 5.1. Negatif öğeleri diziden kaldırın.

Sorunu çözme algoritması oldukça basittir: dizinin tüm öğelerini yineleriz, öğe negatifse, sonraki tüm öğeleri sola kaydırarak onu sileriz. Unutulmaması gereken tek şey, bir öğeyi sildikten sonra, daha fazla işlem için bir sonrakine geçmenize gerek olmadığı, kendisinin mevcut yere taşındığıdır. Problem 5.1'i çözmek için akış şeması Şekil 2'de gösterilmiştir. 5.28.

Aşağıda yorumların yer aldığı programın metnidir.

upor_massiv programı; var i, n, j: bayt; X: gerçek dizi [1 .. 100]; writeln ('dizinin boyutunu girin'); readln(n); (Dizi girişi.) i için: = 1'den n'ye yazmaya başlayın ('X [', i, '] ='); readln (X [i]); son; writeln ('dizi X'); i için: = 1'den n'ye yaz (x [i]: 5: 2, ''); writeln; ben: = 1; süre (ben<=n) do {Если очередной элемент массива X[i] отрицателен, то} if x [ i ]<0 then begin {удаляем элемент массива с номером i.} for j:= i to n_1 do x [ j ] : = x [ j + 1 ]; {Уменьшаем размер массива.} {Не надо переходить к следующему элементу массива.} n:=n -1; end else {Если элемент не удалялся, то переходим к следующему элементу массива.} i:= i +1; writeln (’Изменённый массив ’); for i:=1 to n do {Вывод преобразованного массива.} write (X[ i ] : 5: 2, ’ ’); writeln; end.


Pirinç. 5.28.

Programın sonuçları Şekil 1 de gösterilmiştir. 5.29.


Pirinç. 5.29.

5.9 Bir diziye eleman eklemek

Basit bir görev düşünelim: b sayısını X (10) dizisine üçüncü ve dördüncü elemanlar arasına yerleştirin.

Bu sorunu çözmek için dizinin tüm elemanlarını dördüncüden başlayarak bir eleman sağa kaydırmak gerekir. Daha sonra dizinin dördüncü elemanına b (X: = b;) yazılması gerekecektir. Ancak bitişik değeri kaybetmemek için önce onuncu öğeyi bir sağa, ardından dokuzuncu, sekizinci vb. dördüncüye kaydırmanız gerekir. Yerleştirme algoritmasının blok diyagramı Şekil 2'de gösterilmektedir. 5.30.


Pirinç. 5.30.

Genel durumda, m ve m + 1 numaralı elemanlar arasındaki X (N) dizisine b sayısının yerleştirilmesinin blok şeması Şekil 2'de gösterilmiştir. 5.31.


Pirinç. 5.31.

Aşağıda bu algoritmayı uygulayan programın bir parçası bulunmaktadır 5 Bir diziyi tanımlarken, bir eleman eklemek için yeterli bir boyut sağlamak gerekir. .

var i, n, m: bayt; X: gerçek dizi [1 .. 100]; b: gerçek; writeln'ye başlayın ('N ='); readln(n); i için: = 1'den n'ye yazmaya başlayın ('X [', i, '] ='); readln (X [i]); son; writeln('Dizi X'); i için: = 1'den n'ye yaz (x [i]: 5: 2, ''); writeln; writeln('m ='); readln (m); writeln('b ='); readln(b); i için: = n'den m + 1'e kadar do x [i +1]: = x [i]; x: = b; n: = n + 1; writeln ('Değiştirilmiş dizi'); i için: = 1'den n'ye yaz (X [i]: 5: 2, ''); writeln; son.

5.10 Dizilerle çalışmak için rutinleri kullanma

Dizileri bir alt programa nasıl geçirebileceğinizi görelim. Bildiğiniz gibi (bkz. Bölüm 4), bir altyordamın biçimsel parametreleri listesinde değişkenleri bildirmek için adlarını ve türlerini belirtmeniz gerekir. Ancak, listedeki herhangi bir parametrenin türü yalnızca standart veya önceden bildirilmiş bir tür olabilir. Bu nedenle, bir diziyi bir alt programa geçirmek için önce onun tip 6'yı tanımlamanız gerekir. Dizi veri türü, dizi bildirimi bkz. bölüm 2.4.9. Dizilerle çalışmak bu bölümde ayrıntılı olarak açıklanmaktadır. ve ardından prosedürü ilan edin:

dizi_tipi = dizi[indeks_listesi] ile ilgili bir çeşit;

prosedür

prosedür_adı (dizi_adı: dizi_türü);

Örneğin:

type vector = bayt dizisi [1 .. 10]; matris = real'in [1 .. 3, 1 .. 3] dizisi; prosedür proc (A: matris; b: vektör; var x: vektör);

Formun bir dizesini geçirmenin

değişken ismi: sicim[satır_uzunluğu];

hangi aslında dizi 7 Veri türü "dize", dize bildirimi için bkz. bölüm 2.4.9, aynı şekilde yapılmalıdır:

satır_tipi = sicim[satır_uzunluğu];

prosedür

prosedür_adı (string_name: string_type);

Örneğin:

type stroka_5 = string [5]; stroka_10 = dizi [1 0]; fonksiyon eğlencesi (S t r: stroka_5): stroka_10;

Diziler, açık dizi kavramı kullanılarak bir alt programa geçirilebilir. Açık dizi dizi 8'dir Veri türü "dizi", dizi bildirimi, diziye erişim, bkz. bölüm 2.4.9., açıklamasında, içerdiği öğelerin türü belirtilir, ancak endeks değişiminin sınırları belirlenmez:

open_array_name: dizi dizi... bir çeşit;

Örneğin:

var massiv_1: gerçek dizisi; massiv_2: karakter dizisi dizisi; massiv_3: bayt dizisi dizisi dizisi;

Bellek ayırma ve indekslerin sınırlarının belirlenmesi

35 Cevaplar

Bir diziden bir öğeyi kaldırmanın farklı yolları vardır ve bunlardan bazıları belirli görevler için diğerlerinden daha kullanışlıdır.

Bir dizinin bir elemanını kaldırın

Bir dizinin yalnızca bir öğesini kaldırmak istiyorsanız, \ unset () veya alternatif olarak \ dizi_splice () kullanabilirsiniz.

Ayrıca, bir değeriniz varsa ve bir öğeyi kaldıracak anahtarı bilmiyorsanız, anahtarı almak için \array_search() öğesini kullanabilirsiniz.

\ unset() yöntemi

Lütfen \ unset () kullandığınızda dizi tuşlarının değişmeyeceğini / yeniden indekslemeyeceğini unutmayın. Anahtarları yeniden indekslemek istiyorsanız, tüm anahtarları 0'dan başlayarak sayısal numaralandırılmış tuşlara dönüştüren \ unset () sonrasında \ array_values ​​​​() kullanabilirsiniz.

$ dizi = dizi (0, 1, 2, 3); unset ($ dizisi); $ dizi = dizi_değerleri ($ dizi); var_dump ($ dizi); / * dizi (3) (=> int (0) => int (1) => int (3)) * /

// İlk dizimiz $ dizi = dizi ("mavi", "yeşil", "kırmızı", "sarı", "yeşil", "turuncu", "sarı", "indigo", "kırmızı"); print_r ($ dizi); // Değerleri sarı veya kırmızı olan öğeleri kaldırın $ dizi = dizi_diff ($ dizi, dizi ("sarı", "kırmızı")); print_r ($ dizi);

Bu, yukarıdaki kodun çıktısıdır:

Dizi (=> mavi => yeşil => kırmızı => sarı => yeşil => turuncu => sarı => çivit => kırmızı) Dizi (=> mavi => yeşil => yeşil => turuncu => çivit)

Şimdi array_values ​​​​(), sayısal diziyi yeniden indeksleyecek, ancak dizideki tüm anahtar dizeleri kaldıracak ve bunları sayılarla değiştirecektir. Anahtar adlarını (dizeleri) tutmanız veya tüm anahtarlar sayısal ise diziyi yeniden dizine eklemeniz gerekiyorsa, array_merge () işlevini kullanın:

$ dizi = dizi_merge (array_diff ($ dizi, dizi ("sarı", "kırmızı"))); print_r ($ dizi);

Dizi (=> mavi => yeşil => yeşil => turuncu => çivit)

Tüm değerlerin benzersiz olduğu (veya benzersiz olmadıkları ancak belirli bir değerin tüm örneklerini silmek istiyorsanız) sayısal bir dizin diziniz varsa, ilgili öğeyi kaldırmak için array_diff () öğesini kullanabilirsiniz, örneğin

$ my_array = array_diff ($ my_array, dizi ("Value_to_remove"));

Örneğin:

$ my_array = dizi ("Andy", "Bertha", "Charles", "Diana"); yankı sizeof ($ my_array). "\ n"; $ dizim = dizi_diff ($ dizim, dizi ("Charles")); yankı sizeof ($ my_array);

Aşağıdakiler görüntülenir:

Bu örnekte, orijinal dizi için 4 ve silindikten sonra 3 boyutunu bildiren sizeof () çağrılarıyla doğrulanabileceği gibi, "Charles" değerine sahip öğe silinir.

Bir dizinin bir elemanını yok et

ayarla ()

$ dizi1 = dizi ("A", "B", "C", "D", "E"); ayarlanmamış ($ dizi1); // diziden bilinen dizin (2) değerini sil var_dump ($ dizi1);

Çıktı olacaktır:

Dizi (4) (=> dize (1) "A" => dize (1) "B" => dize (1) "D" => dize (1) "E")

Diziyi yeniden indekslemeniz gerekirse:

$ dizi1 = dizi_değerleri ($ dizi1); var_dump ($ dizi1);

Ardından çıktı şöyle olacaktır:

Dizi (4) (=> dize (1) "A" => dize (1) "B" => dize (1) "D" => dize (1) "E")

Bir dizinin sonundan bir eleman çıktısı- kaldırılan öğenin değerini döndür

karışık dizi_pop (dizi ve $ dizi)

$ yığın = dizi ("portakal", "muz", "elma", "ahududu"); $ last_fruit = dizi_pop ($ yığın); print_r ($ yığını); print_r ("Son Meyve:". $ last_fruit); // Dizinin son elemanı

çıktı olacak

Dizi (=> portakal => muz => elma) Son Meyve: ahududu

Diziden ilk elemanı (kırmızı) kaldırın, - kaldırılan öğenin değerini döndürür

karışık array_shift (dizi ve $ dizi)

$ renk = dizi ("a" => "kırmızı", "b" => "yeşil", "c" => "mavi"); $ first_color = dizi_shift ($ renk); print_r ($ renk); print_r ("İlk Renk:". $ first_color);

Çıktı olacaktır:

Dizi ([b] => yeşil [c] => mavi) İlk Renk: kırmızı

unset () belirtilen değişkenleri yok eder.

Unset() işlevinin bir işlev içindeki davranışı, yok etmeye çalıştığınız değişkenin türüne bağlı olarak değişebilir.

Bir fonksiyon içinde globalleştirilmiş bir değişken unset() ise, sadece yerel değişken yok edilir. Çağıran ortamdaki değişken, unset() çağrılmadan öncekiyle aynı değeri koruyacaktır.

Yukarıdaki kodun cevabı bar.

Bir fonksiyon içindeki global bir değişkenin ayarını kaldırmak () için:

ilişkisel diziler için kullanın ayarsız :

$ dizi = dizi ("a" => 1, "b" => 2, "c" => 3); unset ($ dizi ["b"]); // SONUÇ: dizi ("a" => 1, "c" => 3)

sayısal diziler

Sayısal diziler için kullanın dizi_splice :

$ dizi = dizi (1, 2, 3); dizi_splice ($ dizi, 1, 1); // SONUÇ: dizi (0 => 1, 1 => 3)

Not

Bir dizideki birden çok değeri silmeniz gerekiyorsa ve bu dizideki girişler nesneler veya yapılandırılmış verilerse, bu sizin için en iyi bahistir. Geri arama işlevinden true döndüren girişler kaydedilecektir.

$ dizisi = [["x" => 1, "y" => 2, "z" => 3], ["x" => 2, "y" => 4, "z" => 6], ["x" => 3, "y" => 6, "z" => 9]]; $ sonuç = array_filter ($ dizi, işlev ($ değer) (dönüş $ değeri ["x"]> 2;)); // => [["x" => 3, "y" => 6, z => "9"]]

İlişkili bir diziden birden çok öğeyi kaldırmanız gerekirse, array_diff_key() öğesini kullanabilirsiniz (burada dizi_flip() kullanılır):

$ my_array = dizi ("anahtar1" => "değer 1", "anahtar2" => "değer 2", "anahtar3" => "değer 3", "anahtar4" => "değer 4", "anahtar5" => "değer 5",); $ to_remove = dizi ("anahtar2", "anahtar4"); $ sonuç = array_diff_key ($ my_array, array_flip ($ to_remove)); print_r ($ sonuç);

Dizi (=> değer 1 => değer 3 => değer 5)

Aşağıdaki diziye sahip olduğunuzu varsayalım:

Dizi (=> 193 => 5)

Depolama çalıştırmasını kaldırmak için:

Ayarlanmadı ($ öznitelikleri ["depolama"]); $ öznitelikleri = dizi_filtresi ($ öznitelikleri);

Ve şunları elde edersiniz:

Dizi (=> 193)

Değişken niteliklere sahip belirli bir nesnem olduğunu söylemek isterim (temelde bir tablo eşlemesiydi ve tablodaki sütunları değiştiriyordum, bu nedenle tabloyu yansıtan nesnedeki nitelikler de değişebilir):

Sınıf obj (korumalı $ alanları = dizi ("alan1", "alan2"); korumalı $ alan1 = dizi (); korumalı $ alan2 = dizi (); korumalı yük alanları () () // Bu, $ alan1 ve $'ı yükleyecektir field2 tanımladıkları sütun için veri satırları ile korunan fonksiyon clearFields ($ num) (foreach ($ field olarak $ alanları) (unset ($ this -> $ field [$ num]); // Bu aşağıdaki satırda işe yaramadı ayarlanmamış çalıştı ($ this -> ($ alanı) [$ num]); // Önce $ alanını ())) kullanarak çözmeniz gerekir

$ alanlarının tüm amacı basitti, bu yüzden değiştiklerinde kodun herhangi bir yerine bakmam gerekmiyor, sadece sınıfın başlangıcına bakıyorum ve nitelikler listesini ve dizinin içeriğini değiştiriyorum. $ alanları yeni nitelikleri yansıtmak için.

Varsayılan işlevleri izleyin

$ Dizi = dizi ("test1", "test2", "test3", "test3"); unset ($ Dizi);

$ Dizi = dizi ("test1", "test2", "test3", "test3"); dizi_pop ($ Dizi);

$ Dizi = dizi ("test1", "test2", "test3", "test3"); dizi_splice ($ Dizi, 1,2);

$ Dizi = dizi ("test1", "test2", "test3", "test3"); dizi_shift ($ Dizi);

Burada unset()'den birkaç kez bahsedilmiş olsa da, unset()'in birden çok değişkeni kabul ederek tek bir işlemde bir diziden bitişik olmayan birden çok öğeyi kaldırmayı kolaylaştırdığı belirtilmelidir:

// Bir diziden bitişik olmayan birden çok öğeyi sil $ dizi = ["foo", "bar", "baz", "quz"]; unset ($ dizi, $ dizi); print_r ($ dizisi); // Çıktı: ["foo", "bar"]

unset () dinamik olarak

unset () silinmek üzere bir dizi anahtar kabul etmez, bu nedenle aşağıdaki kod başarısız olur (unset () işlevini dinamik olarak kullanmak biraz daha kolay olsa da).

$ dizi = aralık (0.5); $ kaldır =; $ dizi = ayarlanmamış ($ kaldır); // BAŞARISIZ: "beklenmedik" unset "" print_r ($ dizisi);

Bunun yerine, unset () bir foreach döngüsünde dinamik olarak kullanılabilir:

$ dizi = aralık (0.5); $ kaldır =; foreach ($ kaldır $ k => $ v) (unset ($ dizi [$ v]);) print_r ($ dizi); // Çıktı: [0, 3, 4, 5]

Diziyi kopyalayarak dizi anahtarlarını kaldırın

Henüz bahsedilmeyen başka bir uygulama daha var. Bazen belirli dizi anahtarlarından kurtulmanın en kolay yolu $ dizi1'i $ dizi2'ye kopyalamaktır.

$ dizi1 = aralık (1,10); foreach ($ dizi1 as $ v) (// diziden tüm çift tamsayıları kaldırın if ($ v% 2) ($ dizi2 = $ v;)) print_r ($ dizi2); // Çıktı: [1, 3, 5, 7, 9];

Açıkçası, aynı uygulama metin dizeleri için de geçerlidir:

$ dizi1 = ["foo", "_bar", "baz"]; foreach ($ dizi1 as $ v) (// Alt çizgi ile başlayan tüm dizeleri kaldırın if (strpos ($ v, "_") === false) ($ dizi2 = $ v;)) print_r ($ dizi2); // Çıktı: ["foo", "baz"]

Çözümler:

  1. Bir öğeyi kaldırmak için unset() işlevini kullanın:
unset ($ dizisi); unset ($ dizisi ["foo"]);
  1. Bitişik olmayan birden çok öğeyi kaldırmak için unset () öğesini de kullanın:
unset ($ dizi, $ dizi); unset ($ dizisi ["foo"], $ dizisi ["bar"]);
  1. Birden çok bitişik öğeyi kaldırmak için array_splice() kullanın:
dizi_splice ($ dizi, $ ofset, $ uzunluk);

Daha fazla açıklama:

$ dizi = $ dizi ["foo"] = "";

Sözdiziminin yanı sıra, unset () kullanmak ile bir öğe atamak arasında mantıksal bir fark vardır. İlki This "artık yok" diyor ve ikincisi Bu hala var diyor, ancak değeri boş dize.

Rakamlarla uğraşıyorsanız en iyi seçenek 0'dır. Dolayısıyla şirket XL1000 zincir dişlisinin üretimini durdurursa envanterini güncelleyecektir:

Ayarlanmadı ($ ürünler ["XL1000"]);

Ancak, geçici olarak XL1000 zincir dişlileri tükendiyse ve bu hafta sonunda fabrikadan yeni bir parti alınması planlandıysa, bu daha iyidir:

$ ürünler ["XL1000"] = 0; $ hayvanlar = dizi_değerleri ($ hayvanlar);

Anahtara göre dizi öğesini kaldırın:

Unset işlevini aşağıda gösterildiği gibi kullanın:

$ a = dizi ("selam", "10", 1); ayarlanmamış ($a); print_r($a); / * Çıktı: Dizi (=> selam => 1) * /

Değere göre dizi öğesini kaldırın:

Bir öğenin anahtarını almak için array_search işlevini kullanın ve aşağıda gösterildiği gibi bir dizi öğesini kaldırmak için yukarıdaki yöntemi kullanın:

$ a = dizi ("selam", "10", 1); $ anahtar = dizi_arama (10, $a); if ($ key! == false) (unset ($ a [$ key]);) print_r ($ a); / * Çıktı: Dizi (=> salam => 1) * /

Dizinizi $ dizi değişkeninde oluşturun ve ardından "kaldırmak istediğiniz öğeyi" koyduğum yere "a" gibi bir şey koyun. Ve birkaçını silmek istiyorsanız, o zaman: "a", "b".

Fok
Konunun devamı:
Bir bilgisayar

Kablolu ağlarla çalışmak ve Kinetic ailesindeki Wi Fi ağlarını dağıtmak için yönlendiricinin evrensel ve en ekonomik sürümü Zyxel Keenetic Lite iii'dir. Bilişim Teknoloji...