2009-07-30 5 views
5

PHP, yerel bir dizide/koleksiyonda belirli bir değerin olup olmadığını kontrol etmek için in_array işlevine sahiptir. ArrayObject için eşdeğer bir işlev/yöntem arıyorum, ancak methods'un hiçbiri bu işlevi çoğaltmak için görünmüyor.PHP'nin ArrayObject öğesinin bir in_array karşılığı var mı?

ArrayObject öğesini bir (dizi) olarak atabildiğimi ve in_array içinde kullanabileceğimi biliyorum. Ayrıca, ArrayObject üzerinde manuel olarak yineleyebileceğimi ve değeri bulabileceğimi de biliyorum. Bunu yapmak için "doğru" bir yol gibi görünmüyor.

"Hayır", kanıtlarla destekleyebiliyorsanız, mükemmel bir yanıttır.

+0

Sağladığınız dokümanın böyle bir yöntem olmadığını açıkça belirttiği anlaşılıyor. Pedantically konuşursak, böyle bir fonksiyonun olmadığını kesinlikle ispatlamamız gerçekten mümkün değildir. Bağlantılı belge, elde edeceğiniz kanıttır. –

+1

PHP çekirdek üzerinde çalışan kişiler daha fazla bilgiye sahip olabilir. Soruna giren ve bir hata raporu gönderen kişiler daha fazla bilgiye sahip olabilir. PHP'lerin OO dokümantasyonu genellikle yapabileceği her şeyi kapsamaz. Belli bir şeyi özlemiş olabilirim. Sadece ** çünkü soruyu cevaplayamazsın, bir cevap olmadığı anlamına gelmez. –

cevap

7

sayılı Hatta belgelere görmezden, kendiniz Yani birkaç seçenek ile bırakılır

echo '<pre>'; 
print_r(get_class_methods(new ArrayObject())); 
echo '</pre>'; 

için sıklıkla görebilirsiniz. Söylediğiniz gibi bir seçenek En iyi seçenek olan IMO'dur. , getArrayCopy() yöntemini kullanabilir, ancak muhtemelen seçim işleminin sorgulanabilir semantiğe sahip olduğundan bahsetmeden döküm işleminden daha pahalıdır. kapsülleme hedef ise

, sen ben hiç yinelemeyi önermiyoruz DiziNesnesi

class Whatever extends ArrayObject 
{ 
    public function has($value) 
    { 
    return in_array($value, (array)$this); 
    } 
} 

$a = new Whatever(array(1, 2, 3)); 
if ($a->has(1)) 
{ 
    // stuff 
} 

kendi alt sınıfını yapabilir, o O (n) ve alternatifleri verilmiş sadece değmez.

+1

"Yinelemeyi hiç önermiyorum, bu O (n)" 'in_array'ın kendisi O (n), hayır? –