Jaki jest lepszy sposób sprawdzenia, czy tablica ma więcej niż jeden element?


177

Muszę tylko sprawdzić, czy tablica ma więcej niż jeden element. Próbuję to zrobić w ten sposób:

if (isset($arr['1']))

inny tradycyjny sposób to

if (sizeof($arr)>1)

Który z nich jest lepszy? W takich sytuacjach, jak powinienem dokonać oceny między dwoma alternatywnymi metodami? Czy jest dostępny miernik wydajności do pomiaru, który jest lepszy?


Założenie, że $ arr jest już sprawdzone dla tablicy! Oznacza to, że zanim dojdzie do sprawdzenia warunku if, sprawdzono już, czy jest to tablica.
tuxnani,

Odpowiedzi:


342

Użyj tego

if (sizeof($arr) > 1) {
     ....
}

Lub

if (count($arr) > 1) {
     ....
}

sizeof()jest aliasem dla count(), działają tak samo.

Edycja: Odpowiadając na drugą część pytania: Dwie linie kodów w pytaniu nie są metodami alternatywnymi, pełnią różne funkcje. Pierwsza sprawdza, czy $arr['1']ustawiona jest wartość at , a druga zwraca liczbę elementów w tablicy.


8
@NB: Pytanie było edytowane, początkowy kod został if (sizeof($arr))przetłumaczony na if (sizeof($arr) == 1)- oczywiście to nie sprawdza, czy tablica ma więcej niż jeden element. Ta odpowiedź jest prawidłowa i nie widzę powodu, aby głosować przeciw, stąd mój głos za.
Alix Axel,

2
Przyznam, że nie przyjrzałem się oryginalnej wersji pytania, na które ta odpowiedź jest odpowiedzią. Kontekst jest inny i przepraszam za oznaczenie odpowiedzi jako błędnej. Nie jest źle, jeśli spojrzysz na pierwotne pytanie. Szkoda dla edytowanego pytania.
Uwaga:

Drugi fragment kodu w pytaniu sprawdzi, czy wartość $ arr ['1'] jest ustawiona, czy nie, nie przejmuje się liczbą. Nie było to uwzględnione w odpowiedzi, po prostu pomyślałem, że wspomnę o tym i mam nadzieję, że autor odpowiedzi zaktualizuje odpowiedź :).
Anders M.

@AndersM. dzięki za wskazanie tego. Znalazłem to w odpowiedzi.
Chibuzo

Daję coś takiego: <pre> <code> dla indeksu w 0 .. <3 {guard let testTop: Prediciton = topPredictions [index] else {// your default object} predictionResult.append (testTop)} </code> < / pre> in swift 4
Alex22

44

if(is_array($arr) && count($arr) > 1)

Aby mieć pewność, że $ arr jest rzeczywiście tablicą.

sizeofjest aliasem count, wolę używać count, ponieważ:

  1. 1 znak mniej do wpisania
  2. sizeof na pierwszy rzut oka może oznaczać rozmiar tablicy pod względem pamięci, zbyt techniczny :(

@AlixAxel hmm, ale jeśli $ arr jest ciągiem, count ($ arr) zwróci liczbę znaków tego ciągu, więc ya
Andreas Wong

Nie, jeśli $arrjest ciągiem znaków, zwróci 1.
Alix Axel,

12
Z instrukcji: Zwraca liczbę elementów w zmiennej. Jeśli var nie jest tablicą lub obiektem z zaimplementowanym interfejsem Countable, zostanie zwrócone 1. Jest jeden wyjątek, jeśli var ma wartość NULL, zostanie zwrócone 0 .
Alix Axel,

@AlixAxel oh ok ... wow dzięki, nie wiedziałem, że: o ... W każdym razie zostawię to tam na wypadek, gdyby OP chciał rozróżnić ciąg i tablicę (niezależnie od rozmiaru) Dziękuję za wskazanie to wychodzi :)
Andreas Wong,

6
if (count($arr) >= 2)
{
  // array has at least 2 elements
}

sizeof()jest aliasem dla count(). Oba działają również z nie-tablicami, ale zwracają tylko wartości większe niż 1, jeśli argument jest tablicą lub Countableobiektem , więc jesteś z tym całkiem bezpieczny.


6

Oczywiście użycie count($arr) > 1( sizeofjest tylko aliasem dla count) jest najlepszym rozwiązaniem. W zależności od struktury Twojej tablicy może być mnóstwo elementów, ale żaden $array['1']element.




4

Do sprawdzania tablicy pustej () jest lepsze niż sizeof ().

Jeśli tablica zawiera ogromną ilość danych. Policzenie rozmiaru tablicy zajmie więcej czasu. Ale sprawdzenie pustego jest zawsze łatwe.

//for empty
  if(!empty($array))
     echo 'Data exist';
  else 
     echo 'No data';


 //for sizeof
 if(sizeof($array)>1)
      echo 'Data exist';
 else 
    echo 'No data';

3

isset () sprawdza tylko, czy zmienna jest ustawiona. Nie ma nic wspólnego z rozmiarem ani z tym, co zawiera tablica


2

Zakładam, że $ arr jest tablicą, to właśnie tego szukasz

if ( sizeof($arr) > 1) ...

1

Pierwsza metoda if (isset($arr['1'])) nie będzie działać na tablicy asocjacyjnej.

Na przykład poniższy kod wyświetla „Nie, nie więcej niż jeden”.

$arr = array(
    'a' => 'apple',
    'b' => 'banana',
);

if (isset($arr['1'])) {
    echo "Yup, more than one.";
} else {
    echo "Nope, not more than one.";
}

0

Robię pętlę tablicy i odpowiednio wypełniam wartości domyślne w Swift 4/5

   for index in 0..<3
    {
        let isIndexValid = allObjects.indices.contains(index)
        var yourObject:Class = Class()
        if isIndexValid { yourObject = allObjects[index]}
        resultArray.append(yourObject)
    }
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.