将MySql中逗号分隔的数据转换为php数组


Turning comma separated data from MySql into a php array

除了像我现在这样做之外,还有什么直接的方法可以将逗号分隔的数据从mysql表转换为简单的php数组?

我现在用一种非常混乱的方式来做这件事,方法是选择数据,然后将其连接到一个字符串中,稍后使用。

我在这里使用PDO。

数据是简单的

locations
-------------------
US,UK,SE,DE
DE,SE,CA
GB,US,DE,SE
AU,NZ,GB

pdo

$d = $db->prepare('select locations a from destinations');
$d->execute();
$d->bindColumn('a',$a);
$count = $d->rowCount();
if($count >= 1) {
    $b = '';
    while($row = $d->fetch()) {
        $b .= $a.',';
    }
} else {
    $b = 'No records to display';
}
echo $b;

我希望实现的输出只是一个简单的数组,如下所示,它是所有连接在一起的行。

所需输出

array('US','UK','SE','DE','DE','SE','CA','GB','US','DE','SE','AU','NZ','GB')

你能帮忙吗?

您就快到了。你能做的最简单的事情就是对你现在拥有的完整字符串使用explode(',', $b),坦率地说,我有点惊讶你在写完所有代码后却无法理解这一部分。

您也可以使用GROUP_CONCAT函数将其连接到查询中,而不是在PHP中连接所有内容。不过,这将引入一个限制,因为如果我没记错的话,GROUP_CONCAT的结果最多可以是32k。

以下是另一种方法。在这里,每一行都会被提取并立即分解为一个数组。该数组与(实际上是附加到)合并为一个大的结果数组。

优点是,您不会先插入一个大字符串,这是相对低效的,但在实践中,我怀疑您是否能分辨出性能的差异。

$d = $db->prepare('select locations a from destinations');
$d->execute();
// An array for results.
$results = array();
$d->bindColumn('a',$a);
$count = $d->rowCount();
if($count >= 1) {
    $b = '';
    while($row = $d->fetch()) {
        // explode each row and append it to the array.
        $results = array_merge($results, explode(',', $a));
    }
} else {
    $b = 'No records to display';
}
// Display the complete array.
print_r($results);

您只需选择条目,然后通过以下方式将它们"分解"为数组:

$locationArray = explode(",", $databaseEntry);

这将用逗号分隔数据库条目,并将每个条目添加到数组中。

文件:http://php.net/manual/de/function.explode.php

希望我能帮助