0

たとえば、このjsonファイルを取得しました。ここには、ユーザーのテーブルメタデータがあります。

{
    "id": {
        "index": ["primary", "auto_increment"],
        "unsigned": true,
        "type": "integer"
    },
    "nick": {
        "index": ["unique"],
        "type": "varchar",
        "minLength": 4,
        "maxLength": 10
    },
    "pw": {
        "type": "varchar",
        "minLength": 4,
        "maxLength": 10
    }
}

フィールドがインデックスであるかどうか、およびそれがどのタイプのインデックスであるかを確認します。


foreach内でこの方法でチェックを行う場合

if (isset($value["index"]) && (in_array("primary", $value["index"]) || in_array("unique", $value["index"]))) {
    $arr[] = $key;
}

期待どおり、この結果が得られます

Array
    (
        [0] => id
        [1] => nick
    )

しかし、foreach内でこのようにすると

if (in_array("index", $value) && (in_array("primary", $value["index"]) || in_array("unique", $value["index"]))) {
    $arr[] = $key;
}

私はこの結果を得る...

Array
    (
        [0] => id
    )

これは少し不気味です。誰かが理由を知っていますか?理解できません。私の意見では、*in_array-sample* はisset-sampleと同じことをしなければなりません

4

2 に答える 2

2

in_arrayキーはチェックせず、値をチェックします。issetメソッドは正常に機能し、高速です。

if (array_key_exists("index", $value) && (in_array("primary", $value["index"]) || in_array("unique", $value["index"]))) {
    $arr[] = $key;
}
于 2013-06-11T13:28:30.990 に答える
1
in_array("index", $value)

in_array には、タイプもチェックし、緩い比較を行わないようにするための 3 番目のパラメーターがあります。そして、2番目の配列にはエントリが"unsigned": trueあり、"index" == truetrueです。

使用する:

in_array("index", $value, true);

結果は表示されません。という値がないからです"index"

したがって、array_key_existsまたはissetチェックを使用in_arrayしますが、値をチェックするだけではありません。

于 2013-06-11T13:33:01.297 に答える