【问题标题】:SQL Column result with comma and colon to PHP Array带有逗号和冒号的 SQL 列结果到 PHP 数组
【发布时间】:2013-07-02 17:09:54
【问题描述】:

我有一个 sql 查询,每个结果都返回一个字符串,如 1:One, 2:Two, 3:Three

现在我想将这些字符串中的每一个都转换成这样的 PHP 数组:

Array(
    1: One,
    2: Two,
    3: Three
)

我知道我可以在另一个函数中使用一个 explode 函数来做到这一点,但是,如果我在 mysql 查询上有 500 多个结果,那不是太过分了吗?有没有更好的方法来获得这样的东西?

这是一个 mysql 代码示例,它创建类似于我给出的字符串结果的内容:

GROUP_CONCAT(DISTINCT cast(concat(cast(number.id AS char),': ',number.name) AS char) order by number.id SEPARATOR ', ') AS all_active_numbers

编辑

下面是一个 mysql 可能返回 2 行的示例:

|-----------------------------------------------------------------------|
|   id    |              all_groups            |     groups_assigned    |
|   1     |   1:Team A, 2:Team B, 3:Team C     |        1:Team A        |
|   2     |   1:Team A, 2:Team B, 3:Team C     |   2:Team B, 3:Team C   |
|-----------------------------------------------------------------------|

我想知道的是将每行的all_groupsgroups_assigned的字符串转换为PHP数组的最佳方法。正如我所说,我知道我可以使用 2 explode 函数(使用 foreach 循环在另一个函数中)但是如果我的查询返回 500+ 个结果怎么办?对于服务器来说,为 500 多行中的每一行计算 explode's 似乎有点过头了。

澄清一下,all_groups 类似于可供个人使用的组,groups_assigned 是该人从可用的all_groups 注册的组。

另一种可能性是将其分为 3 个不同的查询?

【问题讨论】:

  • 你的问题是什么?
  • 显示结果如何? row1|1|一个 row2|2|两个????
  • 我会用爆炸来做。也许您可以将它连接到 json 数组并执行 json_decode 但我不知道它是否更快
  • 如果你只是要在客户端拆分数据,那么首先不要在mysql中将数据一起smoosh ...
  • 我用更详细的示例更新了我的问题信息。

标签: php sql arrays explode


【解决方案1】:

只需 explode 基于您的冒号,否则,形成您的查询以分别提供 KEY 和 VALUE。

PHP 示例(未经测试,仅供示例):

$result = $pdo->query($query);
$myArray = array();
while($row = $result->fetchAll(PDO::FETCH_ASSOC)) {
  $myGroup = explode(": ", $row['all_active_numbers']);
  $myArray[][$myGroup[0]] = $myGroup[1];
}
var_dump($myArray);

【讨论】:

  • 我认为他的字符串在一行中看起来像这样“1:一,2:二,3:三”
  • 我是这么想的;将需要某种“每行”分隔符。也许他可以通过提供的示例自己弄清楚这一点,让他指向正确的方向!
  • @RobW 我用更详细的示例更新了我的问题的信息。请看我的编辑 =)。
  • @CristianoSantos - 即使有一百万行数据,它也不会真正给 PHP/Web 服务器带来压力。您的数据库查询应该只查询数据,而您的脚本应该转换/处理数据。希望这会有所帮助!
  • @RobW 那么每一行中数组中字符串的转换不会显着减慢服务器的速度吗?即使在另一个使用 2 个 explode 函数的内部有一个 foreach
猜你喜欢
  • 1970-01-01
  • 2019-06-03
  • 1970-01-01
  • 2013-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-08
相关资源
最近更新 更多