PHP数组的SQL列结果(带逗号和冒号)


SQL Column result with comma and colon to PHP Array

我有一个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:返回两行的例子

|-----------------------------------------------------------------------|
|   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个不同的查询?

仅基于冒号的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);