Question

PHP a une fonction in_array pour vérifier si une valeur particulière existe dans un tableau / collection natif. Je recherche une fonction / méthode équivalente pour ArrayObject, mais aucune des méthodes ne semble dupliquer cette fonctionnalité. / p>

Je sais que je pourrais convertir ArrayObject en tant que (tableau) et l’utiliser dans in_array. Je sais aussi que je pourrais parcourir manuellement ArrayObject et rechercher la valeur. Ni l'un ni l'autre ne semble être le "droit" façon de le faire.

" Non " est une réponse tout à fait appropriée si vous pouvez le justifier par des preuves.

Était-ce utile?

La solution

Non. Même en ignorant la documentation, vous pouvez la voir par vous-même

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

Il ne vous reste donc que peu de choix. Une option, comme vous le dites, est de la lancer

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

Qui est, IMO, la meilleure option. Vous pouvez utiliser la méthode getArrayCopy () mais c'est probablement plus cher que l'opération de transtypage, sans oublier que ce choix aurait une sémantique douteuse.

Si l'objectif est l'encapsulation, vous pouvez créer votre propre sous-classe de ArrayObject

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
}

Je ne recommande pas du tout l'itération, c'est O (n) et ça ne vaut pas la peine, vu les alternatives.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top