【问题标题】:Check whether certain array keys are given or not检查是否给出了某些数组键
【发布时间】:2013-10-04 00:38:02
【问题描述】:

我正在编写某种接受关联数组作为参数的函数。

这个数组可以是:

  1. 只有一个元素。使用密钥pageParamwrapperClass
  2. 有两个元素。必须使用pageParamwrapperClass 键入。

现在我已经编写了这些检查以确保:

  1. 数组不超过 2 个元素。
  2. 该数组没有除pageParamwrapperClass 之外的任何元素

问题是,我的第二次检查没有正常工作。这是我的代码:

public function init_paginator(array $parameters = array())
{
    if(!empty($parameters))
    {
            // This check works
        if(count($parameters) > 2)
        {
            throw new \Exception("Paginator only accepts 2 elements in array: pageParam and wrapperClass.");
        }

            // This check does not work, even if its condition is satisfied 
        if(!in_array(array_keys($parameters), array('pageParam', 'wrapperClass')))
        {
            throw new \Exception("Paginator only accepts 2 elements in array: pageParam and wrapperClass.");    
        }

        // Code..
    }

}

如果我输入数组参数,第二次检查中的异常总是抛出:

  1. array("dummyKey"=>"dummyValue")
  2. array("dummyKey1"=>"dummyValue1", "dummyKey2"=>"dummyValue2")
  3. array("pageParam"=>"test")array("wrapperClass"=>"wrapper_class")
  4. array("pageParam"=>"test", "wrapperClass"=>"wrapper_class")

最后两个输入让我感到困惑!尽管我的论点是正确的,但为什么会引发异常。

【问题讨论】:

    标签: php arrays function arguments associative-array


    【解决方案1】:

    您的第二次检查在array('pageParam', 'wrapperClass') 中查找值array_keys($parameters)。它将一个字符串数组与两个字符串值进行比较。

    您想要的是$parameters 的键等于array('pageParam', 'wrapperClass') 的值,因此:

    array_keys($parameters) === array('pageParam', 'wrapperClass');
    

    对于数组,如果both arrays have the same key/value pairs in the same order and of the same types=== 运算符的计算结果为 TRUE。如果不关心订单,可以使用==

    顺便说一句,这个检查使第一个无用。

    【讨论】:

      【解决方案2】:

      文档没有像应有的那样具有描述性,但是将两个数组作为 args 的意图是 needle 是一个数组,而 haystack 是一个可能包含 needle 数组的数组数组(多维) .我要出去了,所以稍后再看,但也许这是一个替代方案:

      if(count(array_diff_key(array_keys(array('pageParam', 'wrapperClass')), $parameters)) > 1) {
          //exception
      }
      

      【讨论】:

        【解决方案3】:

        问题出在你使用in_array的方式上

        它永远不会起作用,因为它一直将数组 array_keys($parameters) 与另一个数组 array('pageParam', 'wrapperClass') 中的字符串匹配

        所以,它不断返回false

        PHP: in_array

        使用array( array('pageParam', 'wrapperClass'), array('pageParam'), array('wrapperClass'), array()) 作为in_array 的第二个参数可能会起作用。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-05-24
          • 2022-01-01
          • 2012-11-27
          • 1970-01-01
          • 2023-02-02
          • 2013-06-05
          • 1970-01-01
          • 2014-05-12
          相关资源
          最近更新 更多