1

クライアントのCMSからデータを取得していますが、奇妙な結果が得られています

print_r($appliance_data);
foreach ($appliance_data as $adKey => $adValue) {
    print_r($adKey);
    print_r($adValue);
    print_r(array_key_exists($adKey, $appliance_data));
    print_r(isset($appliance_data[$adKey]));
}

出力付き

Array
(
    [94] => stdClass Object
        (
            [operation] => 0
            [value] => 0
        )

    [102] => stdClass Object
        (
            [operation] => 501
            [value] => 4
        )

    [90] => stdClass Object
        (
            [operation] => 0
            [value] => 0
        )
)
94
stdClass Object
(
    [operation] => 0
    [value] => 0
)
(boolean) FALSE
(boolean) FALSE
102
stdClass Object
(
    [operation] => 501
    [value] => 4
)
(boolean) FALSE
(boolean) FALSE
90
stdClass Object
(
    [operation] => 0
    [value] => 0
)
(boolean) FALSE
(boolean) FALSE

これを引き起こしているものは何ですか?

編集:エラーは、array_key_exists AND issetが、配列をループして取得したキーに対してFALSEを返すことです。

serialize($appliance_data)



a:7:{s:2:"94";O:8:"stdClass":3:{s:9:"operation";s:3:"514";s:5:"value";s:1:"2";s:9:"frequency";s:1:"0";}s:3:"102";O:8:"stdClass":3:{s:9:"operation";s:3:"511";s:5:"value";s:1:"4";s:9:"frequency";s:1:"1";}s:2:"90";O:8:"stdClass":3:{s:9:"operation";s:1:"0";s:5:"value";s:1:"0";s:9:"frequency";s:1:"0";}s:2:"68";O:8:"stdClass":3:{s:9:"operation";s:3:"501";s:5:"value";s:1:"3";s:9:"frequency";s:1:"2";}s:2:"66";O:8:"stdClass":3:{s:9:"operation";s:1:"0";s:5:"value";s:1:"0";s:9:"frequency";s:1:"0";}s:2:"84";O:8:"stdClass":3:{s:9:"operation";s:1:"0";s:5:"value";s:1:"0";s:9:"frequency";s:1:"0";}s:2:"98";O:8:"stdClass":3:{s:9:"operation";s:1:"0";s:5:"value";s:1:"0";s:9:"frequency";s:1:"0";}}
4

1 に答える 1

5

int 94 の代わりに文字列 '94' を使用しています。

print_r(array_key_exists(94, $appliance_data));

編集:これをローカルでまったく再現できません-他の誰かができますか?

これを次のコードで複製しようとしました。

$first = new stdClass();
$first->operation = 0;
$first->value = 0;
$second = new stdClass();
$second->operation = 501;
$second->value = 4;
$third = new stdClass();
$third->operation = 0;
$third->value = 0;

$appliance_data = array(94 => $first, 102 => $second, 90 => $third);
// Same output when using these lines too:
// $appliance_data = array('94' => $first, '102' => $second, '90' => $third);
// $appliance_data = array("94" => $first, "102" => $second, "90" => $third);

print_r($appliance_data);
echo "\n\n";
foreach ($appliance_data as $adKey => $adValue) {
    print_r($adKey);
    echo "\n";
    print_r($adValue);
    print_r(array_key_exists($adKey, $appliance_data));
    echo "\n";
    print_r(isset($appliance_data[$adKey]));
    echo "\n\n";
}

そして、この出力を得ました:

Array
(
    [94] => stdClass Object
        (
            [operation] => 0
            [value] => 0
        )

    [102] => stdClass Object
        (
            [operation] => 501
            [value] => 4
        )

    [90] => stdClass Object
        (
            [operation] => 0
            [value] => 0
        )

)


94
stdClass Object
(
    [operation] => 0
    [value] => 0
)
1
1

102
stdClass Object
(
    [operation] => 501
    [value] => 4
)
1
1

90
stdClass Object
(
    [operation] => 0
    [value] => 0
)
1
1
于 2012-04-04T09:27:52.443 に答える