除了像我现在这样做之外,还有什么直接的方法可以将逗号分隔的数据从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
希望我能帮助