Какой лучший способ проверить, есть ли в массиве более одного элемента?


177

Мне просто нужно проверить, есть ли в массиве более одного элемента. Я пытаюсь сделать это так:

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

другой традиционный способ

if (sizeof($arr)>1)

Какой из двух лучше? В таких ситуациях, как я должен судить между двумя альтернативными методами? Есть ли какой-нибудь измеритель проверки производительности, который можно измерить?


Предположение здесь, что $ arr проверен для массива уже! Это означает, что до того, как проверять состояние, проверяется, является ли он массивом.
смокинг

Ответы:


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 {// ваш объект по умолчанию }gnationtionResult.append (testTop)} </ code> < / pre> в быстрой 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 ... В любом случае я просто оставлю это там на случай, если OP захочет различить String и Array (независимо от размера) Спасибо за указание что вышло :)
Андреас Вонг

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()as sizeOf()только псевдоним count()и не означает то же самое во многих других языках. Многие программисты ожидают sizeof()возврата объема выделенной памяти.


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

4

Для проверки массива empty () лучше, чем 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 я делаю циклы и получаю значения по умолчанию в 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.