在php中回显数组
我正在从在php中回显数组,php,arrays,json,Php,Arrays,Json,我正在从bigCommerceapi创建以下对象,如下所示: [ { "id": 412, "option_id": 37, "display_name": "testSteveMemory", "sort_order": 0, "is_required": true }, { "id": 413, "option_id": 34, "display_name": "Hard Drive (desktop)", "sort_
bigCommerce
api创建以下对象,如下所示:
[
{
"id": 412,
"option_id": 37,
"display_name": "testSteveMemory",
"sort_order": 0,
"is_required": true
},
{
"id": 413,
"option_id": 34,
"display_name": "Hard Drive (desktop)",
"sort_order": 1,
"is_required": true
},
{
"id": 414,
"option_id": 24,
"display_name": "Include Keyboard & Mouse",
"sort_order": 2,
"is_required": true
},
{
"id": 415,
"option_id": 33,
"display_name": "Memory",
"sort_order": 3,
"is_required": true
}
]
我使用以下方法将其转换为PHP数组:
$curlProductOptions = json_decode($curlProductOptions, true);
然后我在数组中循环并获取该选项的选项\u id
$allOptions = array();
foreach($curlProductOptions as $value){
//echo $value['option_id'].'<br>';
$option_id = $value['option_id'];
$product_url = $url.'/api/v2/options/'.$option_id.'/values.json';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $product_url);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_USERPWD, $username . ":" . $password);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_ENCODING, "");
$curlProductData = curl_exec($curl);
array_push($allOptions,$curlProductData);
curl_close($curl);
}
如果我使用以下任何一项:
[{"id":112,"option_id":37,"label":"1 gig ram","sort_order":0,"value":"1 gig ram"},{"id":113,"option_id":37,"label":"2 gig ram","sort_order":1,"value":"2 gig ram"},{"id":114,"option_id":37,"label":"4 gig ram","sort_order":2,"value":"4 gig ram"}]
[{"id":104,"option_id":34,"label":"80GB SATA","sort_order":0,"value":"80GB SATA"}]
[{"id":90,"option_id":24,"label":"Yes","sort_order":0,"value":"Yes"},{"id":91,"option_id":24,"label":"No","sort_order":1,"value":"No"}]
[{"id":102,"option_id":33,"label":"1GB DDR2 RAM (default)","sort_order":0,"value":"1GB DDR2 RAM (default)"},{"id":103,"option_id":33,"label":"2GB DDR2 RAM (+ $15.00)","sort_order":1,"value":"2GB DDR2 RAM (+ $15.00)"}]
echo $allOptions;
json_encode($allOptions);
var_dump($allOptions);
当数据返回到移动应用程序时,我收到一个解析错误。也就是说,它没有将结果识别为json数组
我想:
$allOptions=array()
将$allOptions
声明为数组$curlProductData
填充$allOptions
echo "[".implode(",\n",$allOptions)."]";
我现在得到以下返回:
[[{"id":112,"option_id":37,"label":"1 gig ram","sort_order":0,"value":"1 gig ram"},{"id":113,"option_id":37,"label":"2 gig ram","sort_order":1,"value":"2 gig ram"},{"id":114,"option_id":37,"label":"4 gig ram","sort_order":2,"value":"4 gig ram"}], [{"id":104,"option_id":34,"label":"80GB SATA","sort_order":0,"value":"80GB SATA"}], [{"id":90,"option_id":24,"label":"Yes","sort_order":0,"value":"Yes"},{"id":91,"option_id":24,"label":"No","sort_order":1,"value":"No"}], [{"id":102,"option_id":33,"label":"1GB DDR2 RAM (default)","sort_order":0,"value":"1GB DDR2 RAM (default)"},{"id":103,"option_id":33,"label":"2GB DDR2 RAM (+ $15.00)","sort_order":1,"value":"2GB DDR2 RAM (+ $15.00)"}]]
但是我不能得到正确的映射
MrWarby如果您遇到语法分析器错误,可能是因为
echo$curlProductData之后缺少分号。“
您正在依次输出多个数组。一次只能有一个JSON对象
最好是坚持使用数组并使用echo json\u encode($curlProductData)
输出数据
$curlProductData = curl_exec($curl);
array_push($allOptions,$curlProductData);
问题是,curl\u exec
正在返回一个字符串-该字符串可能是JSON字符串,但它仍然是一个字符串
您的最终echo json\u encode($allOptions)
将是一个字符串数组,而不是您可能期望的多维数组
您可以尝试的是echo“[”。内爆(,\n“,$allOptions)。“]代码>因为这将导致多维数组
但是请记住,这必须在循环之后完成。如果在循环内部执行此操作,则最终会出现多个输出,这会导致问题。以下解决方案将每个项放在一个数组中:
foreach($curlProductOptions as $value){
//echo $value['option_id'].'<br>';
$option_id = $value['option_id'];
$product_url = $url.'/api/v2/options/'.$option_id.'/values.json';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $product_url);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_USERPWD, $username . ":" . $password);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_ENCODING, "");
$curlProductData = curl_exec($curl);
foreach(json_decode($curlProductData, true) as $key => $value) {
$allOptions[] = $value; // [] is quicker than array_push() for single items
}
curl_close($curl);
}
foreach($curlProductOptions as $value){
//echo $value['option_id'].'<br>';
$option_id = $value['option_id'];
$product_url = $url.'/api/v2/options/'.$option_id.'/values.json';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $product_url);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_USERPWD, $username . ":" . $password);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_ENCODING, "");
$curlProductData = curl_exec($curl);
$allOptions[] = json_decode($curlProductData, true);
curl_close($curl);
}
foreach($curlProductOptions作为$value){
//echo$value['option_id'].
;
$option_id=$value['option_id'];
$product_url=$url.'/api/v2/options/'.$option_id./values.json';
$curl=curl_init();
curl_setopt($curl,CURLOPT_URL,$product_URL);
curl_setopt($curl,CURLOPT_FOLLOWLOCATION,1);
curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($curl,CURLOPT_USERPWD,$username.:“$password);
curl_setopt($curl,CURLOPT_HTTPAUTH,CURLAUTH_BASIC);
curl_setopt($curl,CURLOPT_ENCODING,”);
$curlProductData=curl\u exec($curl);
foreach(json_解码($curlProductData,true)为$key=>$value){
对于单个项目,$allOptions[]=$value;//[]比array_push()快
}
curl_close($curl);
}
如果您需要问题中的四个分组,那么:
以下解决方案将每个项放在一个数组中:
foreach($curlProductOptions as $value){
//echo $value['option_id'].'<br>';
$option_id = $value['option_id'];
$product_url = $url.'/api/v2/options/'.$option_id.'/values.json';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $product_url);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_USERPWD, $username . ":" . $password);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_ENCODING, "");
$curlProductData = curl_exec($curl);
foreach(json_decode($curlProductData, true) as $key => $value) {
$allOptions[] = $value; // [] is quicker than array_push() for single items
}
curl_close($curl);
}
foreach($curlProductOptions as $value){
//echo $value['option_id'].'<br>';
$option_id = $value['option_id'];
$product_url = $url.'/api/v2/options/'.$option_id.'/values.json';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $product_url);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_USERPWD, $username . ":" . $password);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_ENCODING, "");
$curlProductData = curl_exec($curl);
$allOptions[] = json_decode($curlProductData, true);
curl_close($curl);
}
foreach($curlProductOptions作为$value){
//echo$value['option_id'].
;
$option_id=$value['option_id'];
$product_url=$url.'/api/v2/options/'.$option_id./values.json';
$curl=curl_init();
curl_setopt($curl,CURLOPT_URL,$product_URL);
curl_setopt($curl,CURLOPT_FOLLOWLOCATION,1);
curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($curl,CURLOPT_USERPWD,$username.:“$password);
curl_setopt($curl,CURLOPT_HTTPAUTH,CURLAUTH_BASIC);
curl_setopt($curl,CURLOPT_ENCODING,”);
$curlProductData=curl\u exec($curl);
$allOptions[]=json_decode($curlProductData,true);
curl_close($curl);
}
现在json\u encode($allOptions)
将为您提供一个有效的json字符串。问题是,您试图传递4个json字符串,而本应只读取1个。我使用了您的代码,并用底部的结果更新了我的问题。引发解析错误的是什么,是PHP还是接收PHP输出的语言(如JavaScript)?从PHP接收输出的语言。只要我以前做过(更简单的场景),我就可以将数据映射到移动列表。例如var map2={label:'display_name',count:'option_id',//这是选项值的id:'id'//这是optionSet的id};但现在我必须使用标签:[“0”,“label”],除了:[“1”,“label”]之外,这是显示每个数组部分的标签,而不是列表。我说得通吗???有点像,什么语言接收到的echo json\u encode($allOptions)
?我已经让它工作了,谢谢。见下文。谢谢@akshey2598。上面的第一部分给出了正确的结果。不知道为什么,但我很快就会明白的。。。。