CURL后的结果解析成数组问题

cg20 2014-05-13 10:59:00
index.php,echo json_encode后的结果为:
{"11":{"l_id":"11","l_title":"CITS-香港观光一天游【品质纯玩】"},"12":{"l_id":"12","l_title":"test"}}

然后客户端代码(client.php)如下:

$curlPost='key='.urlencode($key);
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,'http://www.cits-sz.net/api/index.php');
curl_setopt($ch,CURLOPT_HEADER,0);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$curlPost);
$data=curl_exec($ch);
curl_close($ch);
echo json_decode($data,true);

得到的结果也是
{"11":{"l_id":"11","l_title":"CITS-香港观光一天游【品质纯玩】"},"12":{"l_id":"12","l_title":"test"}}

请问要如何才能将其变成如下的方式呢,谢谢了
Array
(
[11] => Array
(
[l_id] => 11
[l_title] => CITS-香港观光一天游【品质纯玩】
)

[12] => Array
(
[l_id] => 12
[l_title] => test
)

)


...全文
562 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2014-05-13
  • 打赏
  • 举报
回复
访问 http://www.cits-sz.net/api/index.php 得: 无权限访问 我不好说什么了
cg20 2014-05-13
  • 打赏
  • 举报
回复
为什么本地和上传到服务得到的结果不同呢??在本地就是array,在服务器就变成string了
cg20 2014-05-13
  • 打赏
  • 举报
回复
引用 3 楼 xuzuning 的回复:
很奇怪啊,我用这一句,curl_setopt($ch,CURLOPT_URL,'http://www.cits-sz.net/api/index.php');显示的就是序列化的 用这一句curl_setopt($ch,CURLOPT_URL,'localhost/szgl/api/index.php');这是本地就正常
xuzuning 2014-05-13
  • 打赏
  • 举报
回复
那你就再 json_decode 一次
$s = '{"11":{"l_id":"11","l_title":"CITS-香港观光一天游【品质纯玩】"},"12":{"l_id":"12","l_title":"test"}}';
print_r(json_decode($s,1));
Array
(
    [11] => Array
        (
            [l_id] => 11
            [l_title] => CITS-香港观光一天游【品质纯玩】
        )

    [12] => Array
        (
            [l_id] => 12
            [l_title] => test
        )

)

cg20 2014-05-13
  • 打赏
  • 举报
回复
引用 1 楼 cg20 的回复:
因为我想将得到的结果,再插入到数据库,就要用到 foreach($arr as $f) 但是,不是array形式的就没办法了
我的目的就是,有a,b两个站,a站上传了很多东西也有很多表,b站要用到a站的1,2两个表,我就想去获得a的1,2表,然后插入到b站的数据库里,所以在a站有http://www.cits-sz.net/api/index.php这个文件,然后在b站用client.php去获取进行相关的操作。
cg20 2014-05-13
  • 打赏
  • 举报
回复
因为我想将得到的结果,再插入到数据库,就要用到 foreach($arr as $f) 但是,不是array形式的就没办法了
cg20 2014-05-13
  • 打赏
  • 举报
回复
引用 12 楼 xuzuning 的回复:
所以你一定不要有 BOM 头 这样事情就简单了
受教了,谢谢。
xuzuning 2014-05-13
  • 打赏
  • 举报
回复
所以你一定不要有 BOM 头 这样事情就简单了
cg20 2014-05-13
  • 打赏
  • 举报
回复
引用 10 楼 xuzuning 的回复:
$key='01f34958ba730edc2ca30d65245dd6a0';
$curlPost='key='.urlencode($key);
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,'http://www.cits-sz.net/api/index.php');//(1)
curl_setopt($ch,CURLOPT_HEADER,0);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$curlPost);
$data=curl_exec($ch);
curl_close($ch);
print_r(json_decode(substr($data, 3), 1));//去掉 BOM 头后再解码
Array
(
    [0] => Array
        (
            [l_id] => 11
            [l_title] => CITS-香港观光一天游【品质纯玩】
        )

    [1] => Array
        (
            [l_id] => 12
            [l_title] => test
        )

)
非常感谢版主xuzuning,问题完美解决,好人一生平安。
xuzuning 2014-05-13
  • 打赏
  • 举报
回复
$key='01f34958ba730edc2ca30d65245dd6a0';
$curlPost='key='.urlencode($key);
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,'http://www.cits-sz.net/api/index.php');//(1)
curl_setopt($ch,CURLOPT_HEADER,0);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$curlPost);
$data=curl_exec($ch);
curl_close($ch);
print_r(json_decode(substr($data, 3), 1));//去掉 BOM 头后再解码
Array
(
    [0] => Array
        (
            [l_id] => 11
            [l_title] => CITS-香港观光一天游【品质纯玩】
        )

    [1] => Array
        (
            [l_id] => 12
            [l_title] => test
        )

)
cg20 2014-05-13
  • 打赏
  • 举报
回复
引用 6 楼 xuzuning 的回复:
访问 http://www.cits-sz.net/api/index.php 得: 无权限访问 我不好说什么了
api/index.php文件的代码如下:

<?php
include("../includes/application_top.php");
function arrayRecursive(&$array, $function, $apply_to_keys_also = false){
    static $recursive_counter = 0;
    if (++$recursive_counter > 1000) {
        die('possible deep recursion attack');
    }
    foreach ($array as $key => $value) {
        if (is_array($value)) {
            arrayRecursive($array[$key], $function, $apply_to_keys_also);
        } else {
            $array[$key] = $function($value);
        }
 
        if ($apply_to_keys_also && is_string($key)) {
            $new_key = $function($key);
            if ($new_key != $key) {
                $array[$new_key] = $array[$key];
                unset($array[$key]);
            }
        }
    }
    $recursive_counter--;
}
function JSON($array){
	arrayRecursive($array, 'urlencode', true);
	$json = json_encode($array);
	return urldecode($json);
}

$key=Reqs("key");
if ($key<>'01f34958ba730edc2ca30d65245dd6a0'){
	echo '无权限访问';exit;
}
$sql='select l_id,l_title from '.TAB_TRAVEL_LINE.' order by l_id';
$rsline=$mydb->query($sql,2);
while ($fline=$rsline->movenext()){
	$data_line[]=$fline;
}
//上面那几句是自己的读取数据的
echo $a=JSON($data_line);
?>
cg20 2014-05-13
  • 打赏
  • 举报
回复
引用 6 楼 xuzuning 的回复:
访问 http://www.cits-sz.net/api/index.php 得: 无权限访问 我不好说什么了
我把这个当成客户端的,暂时测试,地址为 http://www.cits-sz.net/api/client.php,里面的代码

<?php
include("../includes/application_top.php");
$key='01f34958ba730edc2ca30d65245dd6a0';
$curlPost='key='.urlencode($key);
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,'http://www.cits-sz.net/api/index.php');//(1)
//curl_setopt($ch,CURLOPT_URL,'http://localhost/szgl/api/index.php');//(2)
curl_setopt($ch,CURLOPT_HEADER,0);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$curlPost);
$data=curl_exec($ch);
curl_close($ch);
echo $a=json_decode($data,TRUE);
//echo gettype($json);
/*foreach($a as $f){
	echo $f["l_title"];
}*/
?>
用(2)在本地就可以是array,用(1)就不行了,就是原始的信息。
cg20 2014-05-13
  • 打赏
  • 举报
回复
引用 6 楼 xuzuning 的回复:
访问 http://www.cits-sz.net/api/index.php 得: 无权限访问 我不好说什么了
直接访问这个不行的,后面有一个key的, 是这个 http://www.cits-sz.net/api/index.php?key=01f34958ba730edc2ca30d65245dd6a0
QQ互联开发者必读 尊敬的QQ互联开发者: 您好,感谢您选择了PHP SDK 适用版本。 该版本运营环境:PHP + 数据库(可选) + MemCache(可选) PHP版本要求: PHP5.2 + (json_decode函数需要) 开启Curl模块:检查方式是 写一个 phpinfo();的测试文件,需要找到curl的描述方可有效。 如果选择数据库,需要开启mysql。(适用于中型网站) 如果选择MemCache,需要开启php_memcache 功能,同时需要Memcache的支持。(可用于大型网站) PHP SDK 操作流程: 在浏览器中,以网站的方式打开index.php(例如:http://www.example.com/index.php),首次将跳转到安装页面, 填好相关的APPID,APPKEY,选择对应的开放的API。选择session模式(系统支持三种,普通的session_start,基于数据库的session以及memcache的session,memcache的session支持需要MemCache的支持) 最后一个选项是debug功能,打开debug 功能,可以更加方面知道参数的传递地址,参数名称和数值以及结果的返回。 配置好了之后,点击确定,系统会验证相关的参数是否正确。值得注意的地方是:数据库会自动建立sessions表,sessions表的结构如下: CREATE TABLE if not exists `sessions` ( `sessionkey` varchar(32) NOT NULL, `sessionvalue` text NOT NULL, `sessionexpiry` datetime NOT NULL, `sessionip` varchar(15) DEFAULT NULL, PRIMARY KEY (`sessionkey`) ) DEFAULT CHARSET=utf8; 特别强调:在服务器运营环境中,请关闭debug功能。在配置选项完毕之后,删除install目录。在开发环境中,建议开启debug功能,这样,你可以很清晰的清楚传递的参数。 配置好了之后,系统会返回 index.php页面,你就可以开始 php sdk 的入门体验咯。 下面这些话是对coder说的: 代码结构采用api对应的目录,每个api对应相同文件名的PHP文件。代码中涉及到POST操作的部分,分为前后台,通过<?php if(isset($_POST)&&!empty($_POST)){ //这部分是POST处理的部分 //重点看这部分 //参数处理这里有点弱,没有做过多的判断,请在真实运营平台程序中加强 }else{ //这部分显示前台页面 } 每个API文件实现的基本思路是: $sUrl = ""; //指定API地址 $aGetParam = array(...); //指定GET参数 $aPOSTParam = array(...); //指定POST参数 $aFileParam = array(...); //指定文件上传的参数 $sContent = GET|POST|upload($sUrl,$aGETParam|$aPOSTParam,$aFileParam[upload的时候需要,其他时候无此参数]); If($sContent!==FALSE){ $aResult = json_decode($sContent,true); //转化数组 ... //对数组的分析 } 下面对三个主要函数进行分析,文件位置在 common/function.php里面: GET函数: function get($sUrl,$aGetParam){ global $aConfig; //全局参数 $oCurl = curl_init(); //初始化curl if(stripos($sUrl,"https://")!==FALSE){ //对CURL对SSL的支持处理 curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, FALSE); } //拼接GET参数 $aGet = array(); foreach($aGetParam as $key=>$val){ $aGet[] = $key."=".urlencode($val); //注意此处的urlencode } curl_setopt($oCurl, CURLOPT_URL, $sUrl."?".join("&",$aGet));//设置访问URL curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1 );//设置调用返回 $sContent = curl_exec($oCurl);//执行访问 $aStatus = curl_getinfo($oCurl); //获取CURL的状态信息 curl_close($oCurl);//关闭CURL //系统自带的调试信息,运营环境可以删除这些调试信息 if(intval($aConfig["debug"])===1){ echo "请求地址:
".$sUrl."
"; echo "GET参数:
".var_export($aGetParam,true)."
"; echo "请求信息:
".var_export($aStatus,true)."
"; if(intval($aStatus["http_code"])==200){ echo "返回结果:
".$sContent."
"; if((@$aResult = json_decode($sContent,true))){ echo "结果集合解析:
".var_export($aResult,true)."
"; } } } if(intval($aStatus["http_code"])==200){ //正常结果返回 return $sContent; //返回CURL获取到的内容 }else{ echo "返回出错:
".$aStatus["http_code"].",请检查参数或者确实是腾讯服务器出错咯。
"; //打印出错信息 return FALSE; //返回FALSE,注意在判断的时候,请用$sContent===FALSE 或者 $sContent!==FALSE 来判断 } } POST和upload 仅仅对不同的地方做说明: function post($sUrl,$aPOSTParam){ global $aConfig; ... //拼接POST数据 $aPOST = array(); foreach($aPOSTParam as $key=>$val){ $aPOST[] = $key."=".urlencode($val); } curl_setopt($oCurl, CURLOPT_URL, $sUrl); curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1 ); //指定是POST curl_setopt($oCurl, CURLOPT_POST,true); curl_setopt($oCurl, CURLOPT_POSTFIELDS, join("&", $aPOST));//指定POST数据 $sContent = curl_exec($oCurl); $aStatus = curl_getinfo($oCurl); curl_close($oCurl); ...... } /* * 上传图片 */ function upload($sUrl,$aPOSTParam,$aFileParam){ ... //防止请求超时 set_time_limit(0); $oCurl = curl_init(); if(stripos($sUrl,"https://")!==FALSE){ curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, false); } $aPOSTField = array(); foreach($aPOSTParam as $key=>$val){ $aPOSTField[$key]= $val; } foreach($aFileParam as $key=>$val){ $aPOSTField[$key] = "@".$val;);//文件路径,前面要加@,表明是文件上传 } curl_setopt($oCurl, CURLOPT_URL, $sUrl); curl_setopt($oCurl, CURLOPT_POST, true); curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt($oCurl, CURLOPT_POSTFIELDS, $aPOSTField); //这里也不同 $sContent = curl_exec($oCurl); $aStatus = curl_getinfo($oCurl); curl_close($oCurl); ... } 该PHP SDK 目前演示地址:http://www.172web.com/, 如果涉及到网站改版,具体演示地址见网站公告。 如有问题,请通过邮件咨询:admin@172web.com.

21,893

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧