2013-03-01 33 views
-5

Helo人。我必须遵循JSON结构,但我不知道如何使用PHP创建这个东西。我尝试了两个foreach和数组,但是当我开始第三级(例如urlMiniatura)时,我总是会因为需要标签而出错,(urlMiniatura)nd我的数组总是接收指针作为索引。如何生成这样的JSON?

的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

你有什么尝试? – 2013-03-01 10:12:51

+0

看代码!!! – Marcos 2013-03-01 10:13:17

+0

你有什么错误? – SDC 2013-03-01 10:14:43

回答

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

我希望有所帮助。

+0

解决了我的问题,thnaks! – Marcos 2013-03-02 20:42:46

0

试试这个:

$json = json_encode($allLinks);这是错误的,你不要有$allLinks分配

我想它应该是$json = json_encode($array_retorno);

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不显示任何东西。

+0

是的,但是这个结构没有参加我提到的结构。 – Marcos 2013-03-01 10:25:32

+0

所以把_your_结构_in_。但它一定是一个东西。 – 2013-03-01 10:27:35