Frage

PHP hat an in_array Funktion zur Überprüfung, ob ein bestimmter Wert in einem nativen Array/Sammlung vorhanden ist. Ich suche eine äquivalente Funktion/Methode für ArrayObject, aber keine der Methoden scheinen diese Funktionalität zu duplizieren.

Ich weiß, dass ich das ArrayObject als (Array) wirken und es in In_array verwenden könnte. Ich weiß auch, dass ich manuell über das ArrayObject iterieren und nach dem Wert suchen kann. Weder scheint der "richtige" Weg, dies zu tun.

"Nein" ist eine perfekt geeignete Antwort, wenn Sie sie mit Beweisen unterstützen können.

War es hilfreich?

Lösung

Nein. Selbst wenn Sie die Dokumentation ignorieren, können Sie sie selbst sehen

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

Sie haben also nur wenige Möglichkeiten. Eine Option, wie Sie sagen, besteht darin, es zu besetzen

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

Welches ist IMO die beste Option. Du könnte Verwenden Sie die GetArrayCopy () -Methode, aber das ist wahrscheinlich teurer als der Casting -Betrieb, ganz zu schweigen davon, dass die Wahl fragwürdige Semantik haben würde.

Wenn die Kapselung Ihr Ziel ist, können Sie Ihre eigene Unterklasse von ArrayObject erstellen

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
}

Ich empfehle Iteration überhaupt nicht, das ist o (n) und es lohnt sich, angesichts der Alternativen einfach nicht wert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top