数组中的php键被更改

时间:2013-12-12 16:18:21

标签: php arrays

我有这个奇怪的问题,一旦我提交了一系列代码,它似乎就失去了它的密钥   

    $data = array(
    'title' => array(
         'en' => 'en test',
         'fr' => 'fr test'
        ),
    'description' => array(
         'en' => 'description en',
         'fr' => 'description fr'
        ),
    );



try {
    $oauth = new OAuth("xxx","xxx",OAUTH_SIG_METHOD_HMACSHA1,OAUTH_AUTH_TYPE_AUTHORIZATION);
    $oauth->setToken("xxx","xxx");

    // first output of array
    echo '<pre>',print_r($data),'</pre>';

    $oauth->fetch("http://foobar.com/rest/v1/", $data, OAUTH_HTTP_METHOD_POST , array('Content-Type' => 'application/x-www-form-urlencoded'));

    // second output of array
    echo '<pre>',print_r($data),'</pre>';

    $response_info = $oauth->getLastResponseInfo();
    header("Content-Type: {$response_info["content_type"]}");
    echo $oauth->getLastResponse();

    //print_r($oauth);
} catch(OAuthException $E) {
    print_r($E);
    echo "Exception caught!\n";
    echo "Response: ". $E->lastResponse . "\n";
}

生成输出

// first output of array
Array
(
    [title] => Array
        (
            [en] => en test
            [fr] => fr test
        )

    [description] => Array
        (
            [en] => description en
            [fr] => description fr
        )

)
1
// second output of array
Array
(
    [title] => Array
        (
            [0] => fr test
            [1] => en test
        )

    [description] => Array
        (
            [0] => description fr
            [1] => description en
        )

)

如您所见,一旦传递了数据,阵列就会发生变化。

查看发送到服务器的标头,帖子数据看起来像

title=fr%20test&title=en%20test&description=description%20fr&description=description%20en

服务器端的api似乎没有接受任何东西,所以我认为问题可能与数组的发送方式有关。

1 个答案:

答案 0 :(得分:0)

这可能是由于许多问题,很可能你的$ data变量作为oAuth库的引用传递,这个库可能会进行排序而不是asort或array_merge,这将从数组中删除键!

有一件事是肯定的,它肯定是导致这种情况的oAuth库。您只需执行以下操作即可复制数据:

$oauth->fetch("http://foobar.com/rest/v1/", $copy = $data, OAUTH_HTTP_METHOD_POST , array('Content-Type' => 'application/x-www-form-urlencoded'));

这会将数组复制到$ copy中,并保持$ data不变。您可能想要检查它为什么会改变数据!

修改

这是一种排序,查看数据,它在第二个var_dump中排序!反过来排序,但它已经排序了!