2013-03-01 61 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