Bir dizinin belirli bir dizi öğelerini kaldırmak için bir PHP işlevi var mı?
Örneğin, I değerleri olan bir dizi (A
) ve başka bir dizi (B
) sahip olan değerleri çıkarmak için bir ihtiyaç.
A
diziden dizideki değerleri kaldırmak istiyorum B
?
Kullan array_diff()
a>
$new_array = array_diff($arrayB, $arrayA);
$arrayB
tüm unsurları ile bir dizi döndürür not vardır $arrayA
.
Ilişkilendirilebilir diziler kullanımı ile bunu array_diff_assoc()
a>.
Tek bir değer kullanımını kaldırmak için:
unset($array[$key]);
Tabii dizi fonksiyonları eşdeğer yapmak ama bu hiçbir nokta yok etmek döngü olabilir.
Bu "remove" demek ne bağlıdır.
Sen dizi anahtarlarını kaldırmak için unset () fonksiyonunu kullanabilirsiniz, ama bu onu reindex olmaz. Eğer varsa, Yani, örneğin:
$a = array(1 => 'one', 2 => 'two', 3 => 'three');
ve sonra çağrı
unset($a[2]);
Sen gibi bir şey ile bitireceğiz
(1 => 'one', 3 => 'three');
Eğer sıralı endeksli olması dizi gerekiyorsa, sırayla endeksli tuşları ile yeni bir dizi döndürür), hangi (unsetted dizi çekmek ve array_values içine besleyebilir.
Orijinal senaryoya dönersek, diğerleri gözlemlemek gibi, array_diff sizin için iş yapacak, ama bir dizin denetimi yapmaz unutmayın. Eğer, bunun yerine, array_diff_assoc kullanmanız gerekiyorsa.
array_diff fonksiyonu sizin için yapacak.
Ben bir dizi (başlık devletler) gelen tek değerini kaldırmak için bir yol arıyorsanız bu yazı accros geldi. Burada düz yol çıkarmak için değer dizide olduğunu varsayarak, bir:
$list = array('foo', 'bar', 'yay', '\o/');
$toremove = 'foo';
unset($list[array_search($toremove, $list)]);
Kaldırmak için eleman dizinin parçası değilse, bu hataları atmak olsa.
Başka bir çözüm, ama gerçekten optimize değil, performans akıllıca olur:
$list = array('foo', 'bar', 'yay', '\o/');
$toremove = 'foo';
$list = array_flip($list);
unset($list[$toremove]);
$list = array_flip($list);
Neyse, belki burada herkes tarafından önerilen array_diff kullanılarak tek bir değer içeren bir dizi oluşturarak daha hızlı ve daha verimli.