我正在编写某种函数,它接受一个关联数组作为参数。
这个数组可以是:
pageParam
或wrapperClass
。pageParam
和wrapperClass
。现在我写了这些检查以确保:
pageParam
和wrapperClass
问题是,我的第二次检查无法正常工作。这是我的代码:
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..
}
}
如果我输入数组参数,则总是抛出第二次检查中的异常:
array("dummyKey"=>"dummyValue")
array("dummyKey1"=>"dummyValue1", "dummyKey2"=>"dummyValue2")
array("pageParam"=>"test")
或array("wrapperClass"=>"wrapper_class")
array("pageParam"=>"test", "wrapperClass"=>"wrapper_class")
最后两个输入让我感到困惑!尽管我的论点是正确的,为什么抛出异常。
答案 0 :(得分:1)
问题在于您使用in_array
它永远不会起作用,因为它会将数组array_keys($parameters)
与另一个数组array('pageParam', 'wrapperClass')
中的字符串进行匹配
所以,它不断返回false
使用array( array('pageParam', 'wrapperClass'), array('pageParam'), array('wrapperClass'), array())
作为in_array
的第二个参数可能会有效。
答案 1 :(得分:1)
doc不像它们应该那样具有描述性,但是两个数组作为args的意图是针是一个数组而haystack是一个可能包含针数组的数组(多维)数组。我要出去了,以后再看一遍,但也许这是另一种选择:
if(count(array_diff_key(array_keys(array('pageParam', 'wrapperClass')), $parameters)) > 1) {
//exception
}
答案 2 :(得分:1)
您的第二张检查会在array_keys($parameters)
内查找值array('pageParam', 'wrapperClass')
。它将一个字符串数组与两个字符串值进行比较。
你想要的是$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。如果您不关心订单,可以使用==
。
顺便说一下,这个检查会使第一个无效。