ArrayObject de PHP a-t-il un équivalent in_array?
-
05-07-2019 - |
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.
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.