2017-01-02 6 views
7

最近私が作成した古いアプリケーションにAngularを追加し始めました。アプリケーションの一部は、mySqlテーブルの単一のセルにjsonでエンコードされた配列を格納します。私はこれが怒られていることを知っていますが、私は100%後で私をかむために戻ってこないと確信しています。過去に私はちょうど配列のjson_decodeを実行し、値を順序付けられたリストに出力できました。 Angularをインクルードしたので、データはPHPファイルの最後にエンコードされエコーされています。その後、角度コードによってピックアップされて、私はng-repeatを使用して、文字列のようにフォーマットされた配列をループします。

"sub_items":"[\"subOne\",\"subTwo\",\"subThree\"]" 

私が得ることができる最も近い出力にすべてを含む文字列です...それはこの部分に到達するまで、この深くネストされた多次元オブジェクトを介してループすることができますよ文字列であるので意味をなすバックスラッシュ、大括弧および引用符。

sub_itemsのすべてのインスタンスでjson_decodeを実行しようとしましたが、動作しません。私はそれがすべてがちょうど再度コード化されるためだと思う。

この配列をどのようにループすることができますか?私は@YaserアデルMehrabanからの回答のコメントに基づいて、次のといくつかの進歩を遂げている

EDIT

foreach($master as $index => $item) { 
    if($category == $item['category']) { 
     $sub = []; 
     $sub['sub_items'] = json_decode($item['sub_items']); 
     unset($item['sub_items']); 
     array_push($items, $item, $sub); 
    } 
} 

これは

...created_at":"2016-11-01 14:19:07"},{"sub_items":["subOne","subTwo","subThree"... 

私は正しいが、今私が考えているとのトラブルを抱えていた配列のフォーマットを返しますが、それはアイテムの外に座っています。私はarray_mergeも試してみましたが、不要なng-repeatが強制的に新しいキーを追加して、私が思うようにステップダウンしました。提案...

+0

あなたは試しましたか? jsonパイプ? –

+0

あなたが表示しているものは、arrayオプションがtrueに設定されたjson_decode()を使ってうまくデコードする必要があります。アレイ/オブジェクト全体の深さはどれくらいですか? – charlietfl

+1

Stringオブジェクトを分割し、JSON.parse( "[\" subOne \ "、\" subTwo \ "、\" subThree \ "]")を使用して配列 –

答えて

0

最後に、それは次のように変更して並べ替えられました...

foreach($master as $index => $item) { 
    foreach($item as $key => $value) { 
     if($key == 'sub_items') { 
      $sub = json_decode($value); 
      unset($item['sub_items']); 
      $item['sub_items'] = $sub; 
     } 
    } 
    if($category == $item['category']) { 
     array_push($items, $item);     
    } 
} 

これは返さ...

...created_at":"2016-11-01 14:19:07","sub_items":["subOne","subTwo","subThree"... 

はもはやとして扱わ文字列はAngularでループするのが簡単です。ありがとう!

1

更新日:

をあなたは、配列のオプションを使用して復号化し、その後、ngのリピートを使用してそれらを反復処理、しかし、デコードは、あなたが最初にあなたの文字列を分割し、第二の部分を取得する必要があります作業を取得する必要があります。

$subItemsStr = explode('"sub_items":"[\"subOne\",\"subTwo\",\"subThree\"]"')[1]; 
$subItems = json_decode($subItemsStr, true); 

次に使用できます。

+0

を取得すると、javascript変数をPHPメソッドに渡すことはできません。そのPHP関数の戻り値をjavascriptに直接代入します。それらは異なる時間に異なる環境で動作します – charlietfl

+0

@charlietfl json_decodeを使用するときにはJSコードを書くのを忘れていました:) – Yaser

+0

しかし、おそらくあなたが*この部分に到達する*は、文字列リテラルとして*全体のjson構造 – charlietfl

0

これを試してみてくださいません:

var myApp = angular.module('myApp',[]); 

myApp.controller('MyCtrl',function($scope) { 
    var jsonObj = { 
    "sub_items":"[\"subOne\",\"subTwo\",\"subThree\"]" 
    } 

    var jsonString = jsonObj.sub_items; 
    $scope.items = JSON.parse(jsonString); 
}); 

<div ng-app="myApp" ng-controller="MyCtrl"> 
    <div ng-repeat="item in items"> 
    {{item}} 
    </div> 
</div> 
+0

です。私はむしろ私がPHPから始めたいものを得るだろう。私はAngularにはかなり新しいですが、戻ってきたもののいくつかについて数学をする必要があるので、後でこのようなことをする必要があります。ありがとう! – user2530671

関連する問題