2016-03-30 24 views
1

私はWordpressデータベースのものを取り出し、さまざまな方法で処理するツールを開発中です。私がやったことの1つは$categoryと呼ばれる単純な配列を構築することです。この配列にはwp_terms where term_id = <what the user picked>という内容が含まれています。アレイの再構築

残念ながら、それは私が欲しいものがすべて含まれていないので、$category->taxonomyにもwp_term_taxonomy where term_id = <what the user picked>の関連情報が入力されています。それは1対1の関係なので、問題はありません。

しかし、私はまたwp_termsmetaに必要なものをたくさん持っています。そこには、複数の行と1対多の関係があり、同じterm_idがあります。その後、我々は$categorywp_termsからterm_idnameslug、およびterm_groupを持って

{ 
    "term_id" : 9813, 
    "name" : "Who's Who", 
    "slug" : "ww", 
    "term_group" : 0, 
    "taxonomy" : 
    { 
    "term_taxonomy_id" : 9832, 
    "term_id" : 9813, 
    "taxonomy" : "category", 
    "description" : "Who's Who is the CSICON Network's very own show about Doctor Who!", 
    "parent" : 0, 
    "count" : 58 
    }, 
    "meta" : [ 
    { 
     "meta_id" : 8490, 
     "terms_id" : 9813, 
     "meta_key" : "hosts", 
     "meta_value" : "1, 2" 
    }, 
    { 
     "meta_id" : 8492, 
     "terms_id" : 9813, 
     "meta_key" : "thumbnail", 
     "meta_value" : "http://csicon.fm/wp-content/uploads/2015/12/ww_4-248x248.jpg" 
    } 
    ] 
} 

$category->taxonomyにおける原料の束と、その後$category->metaの下で、物事の束:だから私が取得することは、このようなものです。

ここで問題です。

サムネイルURLにアクセスしたい場合は、$category->meta[1]->meta_valueに移動する必要がありますが、それが[1]であることはいつもわかりません。他のカテゴリの場合は、[0]または[2]となります。私が知っているのは、それがmeta_key = thumbnail[n]だということだけです。

理想的には、私はそう$category->thumbnailは現在、そこに格納されているmeta_valueを返す、metaを反復処理し、単に$category下の「本当の」キーとして各meta_keyの値を保存するための良い方法をしたいと思う...しかし、私は落ち着くだろう確実に特定のmeta_keyのために右を見つける信頼できる方法でmeta_valueを使用してください。

どのような考えですか? :)

感謝を解決しよう! $category['meta'] = Category::find($term_id)->catMeta;の代わりに、次のコードを実行しています。

$metaTemp = Category::find($term_id)->catMeta; 
$metaTable = json_decode(json_encode($metaTemp), FALSE); 
foreach($metaTable as $key => $value) { 
    $category[$value->meta_key] = $value->meta_value; 
} 

答えて

1

メタの配列からオブジェクトへの変換を、オブジェクトのプロパティがmeta_keysになるようにすることをお勧めします。したがって、あなたはこの構造を得ます:

{ 
    "term_id" : 9813, 
    "meta" : { 
    "hosts" : { 
     "meta_id" : 8490, 
     "terms_id" : 9813, 
     "meta_key" : "hosts", 
     "meta_value" : "1, 2" 
    }, 
    "thumbnail" : { 
     "meta_id" : 8492, 
     "terms_id" : 9813, 
     "meta_key" : "thumbnail", 
     "meta_value" : "http://csicon.fm/wp-content/uploads/2015/12/ww_4-248x248.jpg" 
    } 
    } 
} 

このように正しいメタを探すには、線形ではなく時間的に一定のコストがあります。

あなたのクライアントはそうのようにそれを検索します:$category->meta->hosts

+0

複数のエントリがmeta_keyを共有できる場合は、メタオブジェクトプロパティとしてオブジェクトではなく配列を持つことになります。 – Weltschmerz

+0

これは私を正しい方向に向かわせ、うまくいった解決策を見つけました!元の投稿が編集されました。 –

0

感謝を! $category['meta'] = Category::find($term_id)->catMeta;の代わりに、次のコードを実行しています。

$metaTemp = Category::find($term_id)->catMeta; 
$metaTable = json_decode(json_encode($metaTemp), FALSE); 
foreach($metaTable as $key => $value) { 
    $category[$value->meta_key] = $value->meta_value; 
} 
関連する問題