Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.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 如何生成这样的JSON?_Php_Json_Libraries - Fatal编程技术网

Php 如何生成这样的JSON?

Php 如何生成这样的JSON?,php,json,libraries,Php,Json,Libraries,大家好。我必须遵循JSON结构,但我不知道如何使用PHP创建这个东西。我尝试使用两个foreach和数组,但是当我启动第三个级别(例如urlMiniatura)时,我总是会出错,因为它们需要标签,(urlMiniatura)和数组始终接收指针作为索引 JSON示例: { "Tipo de ambiente 1" : { "ID ambiente 1" : { "urlMiniatura" : "http://url-absoluta-da-imagem",

大家好。我必须遵循JSON结构,但我不知道如何使用PHP创建这个东西。我尝试使用两个foreach和数组,但是当我启动第三个级别(例如urlMiniatura)时,我总是会出错,因为它们需要标签,(urlMiniatura)和数组始终接收指针作为索引

JSON示例:

    {
  "Tipo de ambiente 1" : {
    "ID ambiente 1" : {
      "urlMiniatura" : "http://url-absoluta-da-imagem",
      "titulo" : "Nome do ambiente",
    },
    "ID ambiente 2" : {
      "urlMiniatura" : "http://url-absoluta-da-imagem",
      "titulo" : "Nome do ambiente",
    },
    (...)
    "ID ambiente N" : {
      "urlMiniatura" : "http://url-absoluta-da-imagem",
      "titulo" : "Nome do ambiente",
    }
  },
  (...)
  "Tipo de ambiente N" : {
    "ID ambiente 1" : {
      "urlMiniatura" : "http://url-absoluta-da-imagem",
      "titulo" : "Nome do ambiente",
    },
    "ID ambiente 2" : {
      "urlMiniatura" : "http://url-absoluta-da-imagem",
      "titulo" : "Nome do ambiente",
    },
    (...)
    "ID ambiente N" : {
      "urlMiniatura" : "http://url-absoluta-da-imagem",
      "titulo" : "Nome do ambiente",
    }
  }
}
我的代码:

foreach ($this->conteudo['tipos_ambientes'] as $linha => $tipo_ambiente_item){
    //Seta valores do ambiente
    $array_retorno[$linha] = $tipo_ambiente_item['tipo_ambiente'];
    //Carrega ambientes
    $conteudo['ambientes'] = $this->ambiente_model->get_ambientes_api_by_codigo_tipo_and_codigo_tipo_ambiente(1, $tipo_ambiente_item['codigo_tipo_ambiente']);
    if ($conteudo['ambientes'] != null){
        foreach($conteudo['ambientes'] as $linha_interna => $ambiente){
            $array_retorno[$linha][$linha_interna] = $ambiente['codigo_ambiente'];
            $array_retorno[$linha][$linha_interna]['urlMiniatura'] = $ambiente['arquivo'];
        }
    }
}
$json = json_encode($allLinks);
试试这个:

$json=json\u encode($allLinks)这是错误的,您没有分配
$allLinks


我猜应该是
$json=json\u encode($array\u-no)

这取决于输入的格式。但假设您有一个由该结构生成的数组,PHP公开了可用于将其转换为JSON的内容。例如:

<?php
  $arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);
   echo json_encode($arr);
?>
$myString = "some text";
$myString['arrayKey'] = "more text";

{“a”:1,“b”:2,“c”:3,“d”:4,“e”:5}


显然,根据您的更新,您使用了此方法,但是
$allLinks
没有显示任何内容。

问题出在哪里


您已经声明错误消息是
不能将字符串偏移量用作数组

尝试将数组元素添加到字符串变量时会发生此错误

例如:

<?php
  $arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);
   echo json_encode($arr);
?>
$myString = "some text";
$myString['arrayKey'] = "more text";
这将在第二行失败,因为变量是字符串,不能以这种方式用作数组

这与您的代码有什么关系?

$array_retorno[$linha][$linha_interna] = $ambiente['codigo_ambiente'];
$array_retorno[$linha][$linha_interna]['urlMiniatura'] = $ambiente['arquivo'];
在上面的代码中,您所做的事情与我引用的示例代码非常相似;主要的区别是,您有很多数组嵌套,这使得更难准确地看到发生了什么,但基本问题是相同的

问题是,
$ambiente['codigo\u ambiente']
是一个字符串值,因此在第一行之后,
$array\u retrono[$linha][$linha\u interna]
也将是一个字符串

然后在第二行,您尝试向该字符串添加一个数组元素,我们得到了错误

如何修复它?

$array_retorno[$linha][$linha_interna] = $ambiente['codigo_ambiente'];
$array_retorno[$linha][$linha_interna]['urlMiniatura'] = $ambiente['arquivo'];
其目的显然是将
$array\u retrono[$linha][$linha\u interna]
作为一个数组,包含
$ambiente['codigo\u ambiente']
$ambiente['arquivo']

因此,我们需要替换代码,以便将它们创建为数组,如下所示:

$array_retorno[$linha][$linha_interna] = array(
    'titulo' => $ambiente['codigo_ambiente'],
    'urlMiniatura' => $ambiente['arquivo']
);
(我从您的JSON示例中获取了数组键名
titulo


我希望这能有所帮助。

您遇到了什么错误?错误是什么?错误就在这行:$array_retrono[$linha][$linha_interna]['urlMiniatura']=$ambiente['arquivo'];在我看来,否决票是没有道理的——OP已经清楚地说明了他们的问题,并且已经做出了事先的努力。诚然,如果有错误,最好知道它是什么(!),但5次否决票显然是不合理的,因为要求查看OP尝试了什么(@Nirav)。不能使用字符串偏移量作为数组是错误的。是的,但此结构不符合我提到的结构。因此,将您的结构放入。但这一定是个问题解决了我的问题thnaks!