dongnianwo8289 2017-07-28 08:29
浏览 102

在API调用中将字符串转换为数组

I am passing an array as a string in parameter to an api in php like this:

http://xx.xx.xx.xx/api.php?query="array(done = 1)"

In my api file, I have used this array to hit a mongodb query:

$query = $_REQUEST['query'];
$cursor = $collection->find($query);

But this didn't work. When I hard-coded array(done = 1) into the find query, it seems to work fine.

if (array('done' => 1) == $query) {
  echo "Y";
}
else {
  echo "N";
}

The above code prints N. So I guess it's because $query is being passed as a string.

PS: I also tried json_encode, json_decode and unserialize but it didn't work. I might be doing omething wrong here.

  • 写回答

1条回答

  • dqusbxh44823 2017-07-28 08:55
    关注

    Well make bit change in your query string, you passing in api request.

    Suppose belowis your array.

    $array = array('done' => 1, 'message' => 'success');
    

    USE array_map_assoc function with some customization, which make easy to implode associative array

    function array_map_assoc( $callback , $array ){
      $r = array();
      foreach ($array as $key=>$value)
        $r[$key] = $callback($key,$value);
      return $r;
    }
    

    Generate your data to be sent in api our data

    $queryString = implode('&',array_map_assoc(function($k,$v){return "$k=$v";},$array));
    

    Now send your data with API

    $url = "http://xx.xx.xx.xx/api.php?" . $queryString ;
    

    Now use print_r($_GET) in your API page and you will receive data like below

    Array
    (
        [done] => 1
        [message] => success
    )
    

    This make your code easy to handle and use in either if condition or sql query.

    评论

报告相同问题?

悬赏问题

  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突