【问题标题】:Build an array out of a SQL query从 SQL 查询中构建数组
【发布时间】:2017-09-01 05:27:36
【问题描述】:

我正在为应该扩展插件的 WordPress 插件编写脚本。现在我正在优化我的脚本。但我的问题是处理数据......数据由插件应用。所以我不能改变任何东西。我必须处理它。

在这里你可以看到数据库的一个sn-p。但是我选择了product_shop_0/1/2/3数量相同的不同帖子只是幸运......它是可变的!

最后我希望有一个这样的数组:

array(92) {
  [0]=> int(5) "24202"
  array(4) {
    ["product_shops_0"]=>
    array(4) {
       ["product_shops_0_price"]=> double(4) "35.99"
       ["product_shops_0_price_old"]=> double(0) ""
       ["product_shops_0_shop"]=> int(5) "18319"
       ["product_shops_0_link"]=> string(78) "http://www.kinguin...."
    }
    ["product_shops_1"]=>
    array(4) {
       ...
    }
    ["product_shops_2"]=>
    array(4) {
       ...
    }
    ["product_shops_3"]=>
    array(4) {
       ["product_shops_3_price"]=> double(4) "40.39"
       ["product_shops_3_price_old"]=> double(0) ""
       ["product_shops_3_shop"]=> int(5) "18315"
       ["product_shops_3_link"]=> string(78) "http://www.gameladen...."
    }
  }

我目前的问题是我不知道如何解决这个问题。 product_shops_0_price. **EVERY**post_idhas it's ownproduct_shops_0_price`。所以,它又从 0 开始。这些数据属于一起:

  • 所有meta_keysmeta_values 具有相同的`post_id`
  • 这些数据应该在product_shops_0product_shops_1 等上拆分...

有谁知道我怎样才能像这样堆叠那个数组? 我已经试过了,但我无法解决它......

这是我的尝试:

$stmt = $database->query("SELECT `meta_key`, `meta_value` FROM `fWR6qIN_postmeta` WHERE (meta_key like '$price_meta' OR meta_key like '$price_old_meta' OR meta_key like '$link_meta' OR meta_key like '$shop_meta')");

$map = array();
while($row = $stmt->fetch_assoc()){

    $price = null;
    $price_old = null;
    $link = "";
    $shop = "";

    if($row["meta_key"] == $price_meta){
        $price = $row["meta_value"];
    }elseif($row["meta_key"] == $price_old_meta){
        $price_old = $row["meta_value"];
    }elseif($row["meta_key"] == $link_meta){
        $link = $row["meta_value"];
    }elseif($row["meta_key"] == $shop_meta) {
        $shop = $row["meta_value"];
    }else{
        echo "Error\n";
    }

    $tmp = array(
        $price_meta =>  $price,
        $price_old_meta => $price_old,
        $link_meta => $link,
        $shop_meta => $shop

    );

    array_push($map, $tmp);
}

很高兴得到帮助! 谢谢和问候!

【问题讨论】:

  • 您使用的是mysqli 还是PDO
  • 计数是有限的还是无限的?即product_shops_0 .. product_shops_2 ... product_shops_n n 是已知的还是未知的?
  • 我使用的是MySQL,每个post_id的计数都是可变的且未知的

标签: php sql arrays wordpress sorting


【解决方案1】:

试试这个,它可以帮助你:对于正则表达式测试click here

<?php
$stmt = $database->query("SELECT pm.post_id, pm.meta_key, pm.meta_value FROM fWR6qIN_postmeta pm GROUP BY pm.post_id, pm.meta_key");

$map = array();
while($row = $stmt->fetch_assoc())
{
    preg_match('/^(product_shops_\d*)_(\S*)/', $row['meta_key'], $matches);
    $product_offset = $matches[1];

    $map[$row['post_id']][$product_offset][$row['meta_key']] = $row['meta_value'];
}

【讨论】:

  • 我得到PHP Notice: Undefined variable for preg_match_all('/([\d]+)/', $meta['meta_key'], $matches);$meta_array[$meta['post_id']][$parent_key][$meta['meta_key']] = $meta['meta_value'];
  • @FrazeJr。我已经更新了答案。我使用了不同的变量$meta 而不是$row。请检查并告诉我
  • @FrazeJr。还是你有错误...告诉我??
  • 现在我得到了PHP Notice: Undefined offset: 1 on line 28。这是这条线$product_offset = $matches[0][1];。但是您将值存储在哪里?
  • @FrazeJr。请检查我用$map替换的变量$meta_array
猜你喜欢
  • 2015-09-07
  • 2010-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-23
  • 1970-01-01
相关资源
最近更新 更多