哪种检查数组是否具有多个元素的更好方法?


177

我只需要检查数组是否具有多个元素。我正在尝试这样做:

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

另一种传统方式是

if (sizeof($arr)>1)

两者哪一个更好?在这种情况下,如何判断两种替代方法?是否有任何性能检查表可用来衡量哪个更好?


假设这里是$ arr已经针对数组进行了验证!这意味着,在进行此if条件检查之前,它已经检查了是否为数组。
tuxnani 2012年

Answers:


342

用这个

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

要么

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

sizeof()是的别名count(),它们的作用相同。

编辑: 回答问题的第二部分:问题中的两行代码不是替代方法,它们执行不同的功能。第一个检查at的值$arr['1']是否设置,而第二个返回数组中元素的数量。


8
@NB:问题已编辑,初始代码为if (sizeof($arr)),其翻译为if (sizeof($arr) == 1)-显然,它不检查数组是否包含多个元素。这个答案是正确的,我认为没有理由不赞成,因此我赞成。
Alix Axel 2012年

2
我承认我没有看问题的原始版本,这个答案是对它的答复。上下文有所不同,对于将答案标记为错误,我深表歉意。如果您查看原始问题,那没有错。这对编辑后的问题不利。
NB

问题中的第二个代码段将检查$ arr ['1']的值是否已设置,它与计数无关。答案中没有解决这个问题,只是以为我提到了这个问题,希望答案的作者会更新答案:)。
Anders M.

@AndersM。感谢您指出了这一点。我已经在答案中反映了这一点。
Chibuzo 2014年

我不喜欢这样:<pre> <code> for 0中的索引。 / pre>快速4
Alex22'1

44

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

为了确保$ arr确实是一个数组。

sizeof是的别名count,我更喜欢使用count,因为:

  1. 少输入1个字符
  2. 快速查看sizeof可能意味着就内存而言的数组大小,太技术性了:(

@AlixAxel hmm,但是如果$ arr是一个字符串,则count($ arr)将返回该字符串的字符计数,所以
Andreas Wong

不,如果$arr是字符串,它将返回1
Alix Axel 2012年

12
从手册中:返回var中的元素数。如果var不是数组或具有已实现Countable接口的对象,则将返回1。有一个例外,如果var为NULL,则将返回0
Alix Axel 2012年

@AlixAxel哦,好的...哇,谢谢,不知道:o ...无论如何,我都会把它留在那儿,以防OP想要区分字符串和数组(不考虑大小)。 :)
Andreas Wong

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

sizeof()是的别名count()。两者都适用于非数组,但是如果参数是数组或Countable对象它们只会返回大于1的值,因此您非常安全。


6

显然,使用count($arr) > 1sizeof只是的别名count)是最好的解决方案。根据数组的结构,可能有大量元素,但没有$array['1']元素。




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中相应地获取默认值

   for index in 0..<3
    {
        let isIndexValid = allObjects.indices.contains(index)
        var yourObject:Class = Class()
        if isIndexValid { yourObject = allObjects[index]}
        resultArray.append(yourObject)
    }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.