在PHP中分解MySQL结果集

时间:2012-02-29 08:47:11

标签: php mysql arrays

我需要从MySQL结果集中存储,检索和创建一个列表,其中一些项目出现在多个位置,它还需要将新项目默认到列表的末尾,因此最好不要控制它使用单独的表。

Product  Position
Prod1    1 3
Prod2    2

创建列表

  • PROD1
  • Prod2的
  • PROD1

这似乎有点矫枉过正,但我​​找不到另一种方法可行。如果我从MySQL结果集转到数组,我怎么能将具有多个位置的项目分解为代表我的列表的新数组项?

2 个答案:

答案 0 :(得分:0)

$data = array(
    array('product' => 'prod 1', 'position' => '1 3'),
    array('product' => 'prod 2', 'position' => '2'),
);

$data_ordered = array();

foreach ($data as $row) {
    foreach (explode(' ', $row['position']) as $subrow) {
        $data_ordered[$subrow] = $row['product'];
    }
}

ksort($data_ordered);

var_dump($data_ordered);

答案 1 :(得分:-1)

您需要两个表格。第一个producs,其ID和名称为

id name
1  Prod1
2  Prod2

您还需要列表的顺序。也许是这样的

list
id items
1  1,2,1

如果要打印ID为1的列表,请从数据库中获取项目并执行explode(',', $items);。现在获取每个项目ID的名称。如果您没有很多产品,请立即获取所有产品并将其存储在阵列中以便更快地访问。

<强>更新

这不是一个好的设计,但如果你想把它放在一个表中:

id name  lists
1  Prod1 1:1,1:3
2  Prod2 1:2

其中列表包含list_id:position,[list_id:position], ...。但要查看列表,您必须获取所有产品并检查它是否在列表中1.创建一个位置=&gt;的数组product_row因此您可以使用ksort()