【问题标题】:Which is a better way to check if an array has more than one element?哪种检查数组是否包含多个元素的更好方法?
【发布时间】:2012-04-18 23:24:09
【问题描述】:

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

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

另一种传统方式是

if (sizeof($arr)>1)

两者哪个更好?在这种情况下,我应该如何在两种替代方法之间进行判断? 是否有任何性能检查表可用于衡量哪个更好?

【问题讨论】:

  • 这里假设 $arr 已经对数组进行了验证!这意味着,在进行 if 条件检查之前,它已经检查了它是否是一个数组。

标签: php arrays


【解决方案1】:

我在 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)
    }

【讨论】:

    【解决方案2】:

    我更喜欢count() 函数而不是sizeOf(),因为sizeOf() 只是count() 的别名,在许多其他语言中并不意味着相同。许多程序员希望sizeof() 返回分配的内存量。

    【讨论】:

    【解决方案3】:

    对于检查数组,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';
    

    【讨论】:

      【解决方案4】:

      第一种方法 if (isset($arr['1'])) 不适用于关联数组。

      例如,下面的代码显示“Nope, not more than one”。

      $arr = array(
          'a' => 'apple',
          'b' => 'banana',
      );
      
      if (isset($arr['1'])) {
          echo "Yup, more than one.";
      } else {
          echo "Nope, not more than one.";
      }
      

      【讨论】:

        【解决方案5】:

        使用这个

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

        或者

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

        sizeof()count() 的别名,它们的工作方式相同。

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

        【讨论】:

        • @NB:问题已被编辑,初始代码为 if (sizeof($arr)),转换为 if (sizeof($arr) == 1) - 显然这不会检查数组是否有多个 元素。这个答案是正确的,我认为没有理由投反对票,因此我投赞成票。
        • 我承认我没有看问题的原始版本,这个答案是对它的回复。上下文不同,对于将答案标记为错误,我深表歉意。如果您查看原始问题,则没有错。这对编辑过的问题很不利。
        • 问题中的第二个代码 sn-p 将检查 $arr['1'] 处的值是否设置,它不关心计数。答案中没有解决这个问题,只是想我会提到这一点,并希望答案的作者会更新答案:)。
        • @AndersM。感谢您指出了这一点。我已经反映在答案中。
        • 我做了类似的事情:
           for index in 0..
          in swift 4
        【解决方案6】:

        使用count()

        if (count($my_array) > 1) {
        // do
        }
        

        这个页面解释得很好http://phparraylength.com/

        【讨论】:

          【解决方案7】:

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

          【讨论】:

            【解决方案8】:
            if (count($arr) >= 2)
            {
              // array has at least 2 elements
            }
            

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

            【讨论】:

              【解决方案9】:

              我假设 $arr 是一个数组,那么这就是您要查找的内容

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

              【讨论】:

                【解决方案10】:

                if(is_array($arr) &amp;&amp; count($arr) &gt; 1)

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

                sizeofcount的别名,我更喜欢用count,因为:

                1. 少输入 1 个字符
                2. sizeof 一目了然可能意味着数组的内存大小,太技术性了:(

                【讨论】:

                • @AlixAxel 嗯,但如果 $arr 是一个字符串,count($arr) 将返回该字符串的字符数,所以你
                • 不,如果$arr 是一个字符串,它将返回1
                • 来自手册:返回 var 中元素的数量。 如果 var 不是数组或实现了 Countable 接口的对象,则返回 1。有一个例外,如果var为NULL,则返回0
                • @AlixAxel 哦,好的...哇,谢谢,不知道:o...无论如何,我将把它留在那里,以防 OP 想要区分字符串和数组(无论大小)感谢您指出这一点:)
                【解决方案11】:

                isset() 仅检查是否设置了变量。与大小或数组包含的内容无关

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2016-10-13
                  • 1970-01-01
                  • 2018-06-15
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-12-25
                  • 1970-01-01
                  • 2017-11-24
                  相关资源
                  最近更新 更多