重建数组

时间:2016-03-30 13:40:09

标签: php wordpress laravel eloquent

我正在研究一种从Wordpress数据库中提取内容并以不同方式处理它的工具。我所做的一件事就是构建一个名为$category的简单数组,其中包含wp_terms where term_id = <what the user picked>的内容。

不幸的是,它并不包含我想要的所有内容,因此我还使用$category->taxonomy中的相关详细信息填充了wp_term_taxonomy where term_id = <what the user picked>。这是一对一的关系,所以没有问题。

但是,我在wp_termsmeta中也得到了一些我需要的东西,其中多条线的一对多关系具有相同的term_id。所以我得到的是这样的:

{
  "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"
    }
  ]
}

我们term_id中的nameslugterm_groupwp_terms$category,然后是一堆内容$category->taxonomy以及$category->meta下的一堆内容。

现在问题

如果我想访问缩略图网址,我将不得不遍历$category->meta[1]->meta_value,但我不能总是知道它将是[1]。对于其他类别,可能是[0][2]。我确切知道的是,[n]meta_key = thumbnail

理想情况下,我希望有一种好方法来遍历meta,只需将每个meta_key的值保存为$category下的“真实”密钥,因此$category->thumbnail会返回当前存储在那里的meta_value ...但我会以一种可靠的方式解决,始终为特定的meta_value找到合适的meta_key

有什么想法? :)

解决

谢谢!而不是$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;
}

2 个答案:

答案 0 :(得分:1)

我建议将meta从数组转换为对象的属性,该对象的属性将是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

答案 1 :(得分: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;
}