Helo伙计们。我有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);
答案 0 :(得分:2)
问题
您已声明错误消息为Cannot use string offset as an array
。
尝试将数组元素添加到字符串变量时会发生此错误。
例如:
$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_ambiente']
是一个字符串值,因此在第一行之后,$array_retorno[$linha][$linha_interna]
也将是一个字符串。
然后在第二行中,您尝试向此字符串添加数组元素,我们得到错误。
如何解决?
目的显然是将$array_retorno[$linha][$linha_interna]
作为包含$ambiente['codigo_ambiente']
和$ambiente['arquivo']
的数组。
因此我们需要替换代码,以便将它们创建为数组,如下所示:
$array_retorno[$linha][$linha_interna] = array(
'titulo' => $ambiente['codigo_ambiente'],
'urlMiniatura' => $ambiente['arquivo']
);
(我从您的JSON示例中获取了数组键名titulo
)
我希望有所帮助。
答案 1 :(得分:1)
这取决于您输入的格式。但是假设你有一个由结构生成的数组,PHP公开json_encode
你可以用来将它转换为JSON。例如:
<?php
$arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);
echo json_encode($arr);
?>
{ “一”:1, “B”:2, “C”:3 “d”:4, “E”:5}
显然,根据您的更新,您使用此方法,但$allLinks
未显示为任何内容。
答案 2 :(得分:0)
试试这个:
$json = json_encode($allLinks);
这是错误的,你没有$allLinks
分配
我想它应该是$json = json_encode($array_retorno);