2009-07-30 13 views
5

PHP ma funkcję in_array do sprawdzania, czy konkretna wartość istnieje w natywnej tablicy/kolekcji. Poszukuję równoważnej funkcji/metody dla ArrayObject, ale żaden z methods wydaje się duplikować tę funkcjonalność.Czy obiekt ArrayObject w PHP ma odpowiednik in_array?

Wiem, że mogłem rzucić ArrayObject jako (tablica) i użyć go w in_array. Wiem też, że mogę ręcznie iterować nad ArrayObject i szukać wartości. Wydaje się, że nie jest to "właściwy" sposób na zrobienie tego.

"Nie" jest idealnie odpowiednią odpowiedzią, jeśli możesz poprzeć ją dowodami.

+0

Podany dokument wydaje się dość wyraźnie wskazywać, że nie ma takiej metody. Pedantycznie rzecz biorąc, nie jest możliwe, abyśmy ściśle udowodnili, że taka funkcja nie istnieje. Połączony dokument to cały dowód, jaki otrzymasz. –

+1

Osoby pracujące nad rdzeniem PHP mogą mieć więcej informacji. Osoby, które napotkały problem i przesłały raport o błędzie, mogą uzyskać więcej informacji. Dokumentacja OO w PHP często nie obejmuje wszystkiego, co może. Mogłem przegapić coś oczywistego. Tylko dlatego, że ** nie możesz odpowiedzieć na pytanie, nie oznacza, że ​​nie ma odpowiedzi. –

Odpowiedz

7

nr Nawet pomijając dokumentację, można zobaczyć go na własne oczy

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

Więc pozostaje ci kilka wyborów. Jedną z opcji, jak mówisz, jest jej odlewanie:

To jest IMO, najlepsza opcja. Możesz może użyć metody getArrayCopy(), ale to prawdopodobnie jest droższe niż operacja przesyłania, nie wspominając, że wybór miałby wątpliwą semantykę.

Jeśli hermetyzacja jest twój cel, można stworzyć własną podklasę 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 
} 

Nie polecam iteracji w ogóle, to O (n) i po prostu nie warto, biorąc pod uwagę alternatywy.

+1

"Nie polecam żadnej iteracji, to jest O (n)" 'in_array' samo jest O (n), nie? –