PHP'nin DiziNesnesi bir in_array'in eşdeğer var mı?

1 Cevap php

PHP belirli bir değer, bir yerli dizi / koleksiyonunda varsa kontrol için bir in_array işlevi vardır. Ben DiziNesnesi için eşdeğer bir işlev / yöntem için arıyorum, ama methods hiçbiri bu işlevselliği çoğaltmak için görünür.

Ben bir (dizi) olarak ArrayObject döküm ve İn_Array'in kullanmak olabileceğini biliyorum. Ben de elle DiziNesnesi üzerinde yineleme ve değer için bakmak olabilir biliyorum. Ne bunu yapmak için "doğru" yol gibi görünüyor.

Eğer delil ile yedeklemek eğer "Hayır" mükemmel uygun cevaptır.

1 Cevap

No Hatta belgeleri görmezden, kendiniz için görebilirsiniz

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

Yani birkaç seçenek kalır. Bir seçenek, dediğiniz gibi, döküm için

$a = new ArrayObject( array( 1, 2, 3 ) );
if ( in_array( 1, (array)$a ) )
{
  // stuff
}

IMO, en iyi seçenek olduğunu. Sen could getArrayCopy () yöntemini kullanın ama o seçimi tartışmalı semantik olurdu söz değil, muhtemelen döküm işlemi daha pahalı.

Kapsülleme Amacınız ise, DiziNesnesi kendi alt sınıfı yapabilirsiniz

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
}

Ben bu alternatifleri göz önüne alındığında sadece değmez O (n) bulunuyor ve tüm yineleme önermiyoruz.