Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在php中回显数组_Php_Arrays_Json - Fatal编程技术网

在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。上面的第一部分给出了正确的结果。不知道为什么,但我很快就会明白的。。。。