【问题标题】:Mysteriously empty array in PHP post request after iteration迭代后PHP发布请求中的神秘空数组
【发布时间】:2014-02-07 10:49:50
【问题描述】:

我正在尝试通过 cURL POST 请求接收数组,但遇到了一个额外的问题。

长话短说:这是我们所处的一个 api 控制器,当我 json_encode 响应时...

echo json_encode($_POST['keys']); return;

结果(在api通信的调用端):

array(361) {
  [0]=>
  string(26) "some+urlencoded+string"
  [1]=>
  string(14) "and+some+other"
  ...
}

等等。所以api接收我的参数数组没问题。

然后在 api 中,我尝试使用 foreach 循环对每个字符串进行 urldecode,以将这些值保存在其他数组中:

$myArray = array();

foreach ($_POST['keys'] as $key => $value)
{
    $myArray[$key] = urldecode($value);
    // Or $myArray[] = urldecode($value); -- same result
}

echo json_encode($myArray); return;

结果如下:

NULL

我做错了什么?

提前致谢:)

================================================ ====================================

编辑:问题似乎是,在 api 控制器(位于 yii 应用程序中)中,urldecode 不起作用。 utf8_decode 和 base64_decode 都没有。无论如何,至少它们不能在 foreach 循环中工作。为什么他们不工作?打败我。我还是卡住了。

================================================ ====================================

编辑 2:我在隔离问题方面取得了一些进展,在 SO 上问了另一个 Q。对不起,还不如关了。

PHP (CI) cURL passed multidimensional array does not behave as one (Can't loop it)

【问题讨论】:

    标签: php arrays api post curl


    【解决方案1】:

    我不认为你的问题在这里......你确定你的 $_POST['keys'] 在你 foreach 时没问题吗?您应该尝试在循环中回显某些内容,或者之前的 print_r($_POST['keys'])。

    我试过了:

    $_POST['keys'] = Array('some+urlencoded+string','and+some+other') ;
    $myArray = array();
    
    foreach ($_POST['keys'] as $key => $value)
        $myArray[$key] = urldecode($value);
    
    echo '<pre>' ;
    var_dump($_POST['keys']) ;
    echo json_encode($_POST['keys']);
    echo "\n" ;
    echo json_encode($myArray);
    echo '</pre>' ;
    

    渲染这个,看起来很正确:

    array(2) {
      [0]=>
      string(22) "some+urlencoded+string"
      [1]=>
      string(14) "and+some+other"
    }
    ["some+urlencoded+string","and+some+other"]
    
    ["some urlencoded string","and some other"]
    

    在 $_POST['keys'] 和 $myArray 上制作 print_r,我认为您的循环不起作用。

    【讨论】:

    • 首先,感谢您抽出宝贵时间回复。我提醒你,这是我从另一个应用程序调用的 api,我只能 var_dump $data = callApi(array('keys' => $keys));在原始应用程序中(调用 api() 的那个。这就是为什么我只能有一个 echo json_encode(),这就是我看到的。
    • 好吧,我不能告诉你更多......你确定你的 foreach 正在循环一个真正的数组 var 吗?你还能 var_dump 你尝试 foreach 的变量吗?即使有问题,只要你真正进入你的 foreach 循环,你就不应该有“null”。在 json_encode 之后你有没有尝试 print_r 的 sizeof 你的 $myArray ?
    • 你的循环中的 var_dump($value) 和 var_dump(urlencode($value)) 是什么?也许您的 $value 不是可以编码的常规字符串?你试过 urlencode((string)$value) 吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-19
    • 2012-11-10
    • 2011-04-29
    • 2014-06-07
    • 2016-03-01
    • 1970-01-01
    相关资源
    最近更新 更多