-5

こんにちは人々。従わなければならないJSON構造がありますが、PHPを使用してこれを作成する方法がわかりません。2つのforeachと配列を試してみましたが、3番目のレベル(たとえば、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);
4

3 に答える 3

2

問題

エラー メッセージはCannot use string offset as an array.

このエラーは、配列要素を文字列変数に追加しようとすると発生します。

例えば:

$myString = "some text";
$myString['arrayKey'] = "more text";

変数は文字列であり、この方法では配列として使用できないため、これは 2 行目で失敗します。

では、これはあなたのコードにどのように関係していますか?

$array_retorno[$linha][$linha_interna] = $ambiente['codigo_ambiente'];
$array_retorno[$linha][$linha_interna]['urlMiniatura'] = $ambiente['arquivo'];

上記のコードでは、引用したサンプル コードと非常によく似た処理を行っています。主な違いは、配列のネストが多く、何が起こっているのかを正確に把握するのが難しくなっていることですが、基本的な問題は同じです。

問題は、$ambiente['codigo_ambiente']これが文字列値であるため、最初の行の後$array_retorno[$linha][$linha_interna]も文字列になることです。

次に、2 行目でこの文字列に配列要素を追加しようとすると、エラーが発生します。

修正方法は?

意図は明らかに、と の両方を$array_retorno[$linha][$linha_interna]含む配列として持つことです。$ambiente['codigo_ambiente']$ambiente['arquivo']

したがって、次のように、コードを配列として作成するようにコードを置き換える必要があります。

$array_retorno[$linha][$linha_interna] = array(
    'titulo' => $ambiente['codigo_ambiente'],
    'urlMiniatura' => $ambiente['arquivo']
);

titulo( JSONの例から配列キー名を取得しました)

それが役立つことを願っています。

于 2013-03-01T10:33:43.410 に答える
1

入力の形式によって異なります。しかし、構造から生成された配列があるとします。PHP はjson_encode、それを使用して JSON に変換できることを公開します。例えば:

<?php
  $arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);
   echo json_encode($arr);
?>

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

どうやら、更新によると、この方法を使用している$allLinksようですが、何も表示されていません。

于 2013-03-01T10:15:55.137 に答える
0

これを試して:

$json = json_encode($allLinks);$allLinksこれはあなたが割り当てていない間違っています

私はそれがすべきだと思います $json = json_encode($array_retorno);

于 2013-03-01T10:14:01.727 に答える