Який кращий спосіб перевірити, чи має масив більше одного елемента?


177

Мені просто потрібно перевірити, чи має масив більше одного елемента. Я намагаюся зробити це так:

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

інший традиційний спосіб

if (sizeof($arr)>1)

Яке з двох краще? Як у таких ситуаціях слід судити між двома альтернативними методами? Чи є якийсь вимірювальний прилад для перевірки працездатності, щоб оцінити, що краще?


Припущення ось $ arr вже перевірено для масиву! Це означає, що перш ніж прийти до цього, якщо перевірити умову, його вже перевірено, чи є масив.
tuxnani

Відповіді:


342

Використовуй це

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

Або

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

sizeof()Псевдонім для count(), вони працюють так само.

Правка: Відповідь на другу частину запитання: Два рядки кодів у питанні не є альтернативними методами, вони виконують різні функції. Перший перевіряє, чи встановлено значення at $arr['1'], а другий повертає кількість елементів у масиві.


8
@NB: Питання було відредаговано, початковий код був if (sizeof($arr)), що було перекладено if (sizeof($arr) == 1)- очевидно, що не перевіряється, чи має масив більше одного елемента. Ця відповідь є правильною, і я не бачу причин голосувати за них, звідси і мою позицію.
Алікс Аксель

2
Я визнаю, що не дивився на оригінальну версію запитання, на яку відповідає ця відповідь. Контекст інший, і я прошу вибачення за те, що позначив відповідь неправильною. Це не помиляється, якщо подивитися на оригінальне запитання. Це погано для редагованого питання.
NB

Другий фрагмент коду у запитанні перевірить, чи встановлено значення $ arr ['1'] чи ні, він не стосується підрахунку. Це не було вирішено у відповіді, я просто подумав, що це згадаю і сподіваюся, що автор відповіді оновить відповідь :).
Андерс М.

@AndersM дякую, що вказали на це. Я це відобразив у відповіді.
Chibuzo

Я маю щось на зразок: <pre> <code> для індексу в 0 .. <3 {Guard let testTop: Prediciton = topPredictions [index] else {// ваш об'єкт за замовчуванням} predictionResult.append (testTop)} </code> < / pre> in swift 4
Alex22

44

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

Просто щоб бути впевненим, що $ arr - це справді масив.

sizeofПсевдонім count, я вважаю за краще використовувати count, тому що:

  1. 1 символ менше набрати
  2. sizeof при швидкому погляді може означати розмір масиву з точки зору пам'яті, занадто технічний :(

@AlixAxel хм, але якщо $ arr - це рядок, count ($ arr) поверне кількість символів цієї рядка, так що
Андреас Вонг,

Ні, якщо $arrце рядок, вона повернеться 1.
Алікс Аксель

12
З посібника: Повертає кількість елементів у var. Якщо var - це не масив чи об'єкт із реалізованим інтерфейсом Countable, 1 буде повернуто. Є один виняток, якщо var NULL, 0 буде повернуто .
Алікс Аксель

@AlixAxel ой добре ... спасибі, не знав, що: o ... У будь-якому випадку я просто залишу його на випадок, якщо ОП захоче розмежувати рядок і масив (незалежно від розміру). Дякую за вказівку що поза :)
Андреас Вонг

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

sizeof()псевдонім для count(). Обидва також працюють з немасивами, але вони повернуть значення, більші за 1, лише якщо аргумент є або масивом, або Countableоб'єктом , тому ви досить безпечні з цим.


6

Очевидно, що використання count($arr) > 1( sizeofце лише псевдонім для count) є найкращим рішенням. Залежно від структури вашого масиву може бути багато елементів, але жодного $array['1']елемента.



6

Я вважаю за краще, щоб count()функція замість sizeOf()як sizeOf()була лише псевдонімом count()і не означає те саме для багатьох інших мов. Багато програмістів розраховують sizeof()повернути кількість виділеної пам'яті.


1
Тут також пояснено. stackoverflow.com/questions/3974385/php-array-count-or-sizeof Це важливо , оскільки це питання зараз є найкращим хітом Google для sizeofvscount
Тим Огілві,

4

Для перевірки масиву порожній () краще, ніж sizeof ().

Якщо масив містить величезну кількість даних. Для підрахунку розміру масиву знадобиться більше разів. Але перевірити порожнє завжди просто.

//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 () перевіряє, чи встановлена ​​змінна .. Не має нічого спільного з розміром або тим, що містить масив


2

Я припускаю, що $ arr - це масив, то це те, що ви шукаєте

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

1

Перший метод if (isset($arr['1'])) не працюватиме на асоціативному масиві.

Наприклад, наступний код відображає "Ні, не більше одного".

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

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

0

Я роблю циклічний масив і відповідно заповнюю стандартні настройки у 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)
    }
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.