1

連想配列を引数として受け入れるある種の関数を書いています。

この配列は次のようになります。

  1. 空の
  2. 要素は 1 つだけです。pageParamまたは のいずれかのキーを使用しますwrapperClass
  3. 2つの要素があります。と でキーを設定する必要がpageParamありwrapperClassます。

今、私はこれらのチェックを書いて、次のことを確認しました:

  1. 配列は 2 要素以下です。
  2. pageParam配列にはand以外の要素はありませんwrapperClass

問題は、私の 2 番目のチェックが正しく機能していないことです。これが私のコードです:

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..
    }

}

次のような配列引数を入力すると、2 番目のチェックで例外が常にスローされます。

  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")

最後の 2 つの入力は、私を困惑させるものです! 私の議論が正しいにもかかわらず、例外がスローされる理由。

4

3 に答える 3

1

ドキュメントは本来あるべきほど説明的ではありませんが、引数として 2 つの配列を使用する意図は、針が配列であり、干し草の山が針配列を含む可能性のある配列 (多次元) の配列であることです。私は出かけるので、後でもう一度見ますが、おそらくこれは代替手段として:

if(count(array_diff_key(array_keys(array('pageParam', 'wrapperClass')), $parameters)) > 1) {
    //exception
}
于 2013-10-04T01:03:21.323 に答える
1

問題は使い方にあるin_array

array_keys($parameters)配列を別の配列内の文字列に一致させ続けるため、機能しませんarray('pageParam', 'wrapperClass')

だから、それは戻ってきますfalse

PHPを参照してください: in_array

array( array('pageParam', 'wrapperClass'), array('pageParam'), array('wrapperClass'), array())の2番目のパラメータとして使用するとin_arrayうまくいくかもしれません。

于 2013-10-04T00:59:37.700 に答える
1

2 番目のチェックでは、array_keys($parameters)内の値を探しますarray('pageParam', 'wrapperClass')。文字列の配列を 2 つの文字列値と比較します。

$parametersのキーがの値と等しくなるようにしたいので、次のarray('pageParam', 'wrapperClass')ようになります。

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

配列の場合、両方の配列に同じキーと値のペアが同じ順序で同じ型である===場合、演算子は TRUE と評価されます。順序を気にしない場合は、 を使用できます。==

ちなみに、このチェックは最初のものを役に立たなくします。

于 2013-10-04T01:06:31.713 に答える