2010-09-21 20 views
8

PHP'ye yeni geldim ve bu temel soruyu çözemiyorum. PHP'nin bir çeşit ayar veya liste nesnesi var mı? Bir dizi gibi bir şey, ancak dinamik olarak herhangi bir sayıda nesneyi ekleme veya kaldırma yeteneği ile.PHP'de Set veri yapısı var mı?

cevap

7

Evet, array nesnesini ve array functions'u kullanabilirsiniz.

Temel olarak, array_push işlevini veya $arrayName[] = ... gösterimini (arrayName dizininizin adıdır) kullanarak bir diziyi dinamik olarak büyüyebilirsiniz.

+2

Bir PHP dizisi hem bir "Liste" hem de bir "HashMap" sağlar, ancak bir 'Set 'değil. Öğelerinizi bir dizi anahtarı olarak ayarlayarak bir 'Set'' HashMap' arabiriminden öykünebilirsiniz. – dtech

+0

Ama sonra sadece skaler tiplerini kurabilirsiniz. Eğer haklıysam, bu kötü bir çözümdür. – ribamar

2

PHP dizileri, bir dizi tarafından dizilen sıralanmış dizilerden oluşan bir mashup ve bir karma arama tablosu gibi. Herhangi bir öğeyi bir dize endeksi ile arayabilir, ancak öğelerin de belirli bir sırası vardır.

3

Sadece bir php dizisi kullanın, PHP'de 'sabit boyut' dizisi diye bir şey yoktur, bu yüzden onlarla iyi durumda olmalısınız.

+0

Evet, sabit boyutlu bir dizi var. SplFixedArray' denir. Lütfen buraya bir göz atın: http://php.net/manual/en/splfixedarray.construct.php – Julian

2

Sorunun başlığında "Set nesnesi" ifadesinden bahsetmiş olduğunuzdan (yani, kümede tekrarlanmaması gereken nesnelere ihtiyacınız varsa), SplObjectStorage (php 5.3+) 'a bakın.

1

Set ürününü Nspl numaralı telefondan kullanabilirsiniz. Bu argüman gibi diğer setleri, diziler ve çaprazlanabiliyorsa nesneleri almak temel set işlemlerini destekler: Eğer tekrarlanan elemanları olmadan Set veri yapısı arıyorsanız

$set = set(1, 2); 

$set->add('hello'); 
$set[] = 'world'; 

$set->delete('hello'); 

$array = [1, 2, 3]; 
$intersection = $set->intersection($array); 

$anotherSet = Set::fromArray([1, 2, 3]); 
$difference = $set->difference($anotherSet); 

$iterator = new \ArrayIterator([1, 2, 3]); 
$union = $set->union($iterator); 

$isSubset = $set->isSubset([1, 2, 'hello', 'world']); 

$isSuperset = $set->isSuperset([1, 2]); 
2

, PHP 7'nin olarak SPL bir için destek ekler gibi görünüyor Set veri yapısı.