我有一个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_groups
和groups_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);