我有以下sql查询:
SELECT job_id, job_type FROM jobs
我从mysql查询中得到以下结果(行集):
结果(print_r):
Array
(
[0] => stdClass Object
(
[job_id] => 239
[job_type] => 'type1';
}
[1] => stdClass Object
{
[job_id] => 53
[job_type] => 'type2';
}
[2] => stdClass Object
{
[job_id] => 76
[job_type] => 'type3';
}
[3] => stdClass Object
{
[job_id] => 78
[job_type] => 'type1';
}
)
正如您所看到的,我有三种类型的工作:type1
,type2
,type3
有没有办法按job_type
映射/重新组合这些结果?
基本上我想要有类似的东西:
Array
(
['type1'] => Array (
[0] => stdClass Object
{
[job_id] => 239
[job_type] => 'type1';
}
[1] => stdClass Object
{
[job_id] => 76
[job_type] => 'type1';
}
)
['type2'] => Array (
[0] => stdClass Object
{
[job_id] => 53
[job_type] => 'type2';
}
)
['type3'] => Array (
[0] => stdClass Object
{
[job_id] => 78
[job_type] => 'type3';
}
)
)
或许我应该使用不同的查询?
我试图使用array_map()
没有运气,但我只得到一个数组只包含一个job_type的元素。
提前致谢。
答案 0 :(得分:2)
您无法使用预定义的PHP函数执行此操作。但你可以很容易地自己做。
例如:假设您在一个名为$ rows的变量中的问题中写了您的MySQL结果,您可以执行以下操作来获取所需的地图。
$map = array();
foreach($rows as $row) {
if (!isset($map[$row->job_type])) {
$map[$row->job_type] = array($row);
} else {
$map[$row->job_type][] = $row;
}
}
现在$ map包含您想要的数组。
答案 1 :(得分:1)
不幸的是,此任务在纯PHP / MySQL中没有本机解决方案。所以你需要在PHP端对它进行排序。我认为您应该在需要时使用它来编写函数
function sortBy($array, $key, $sortKeys=false){
// I don't test this function, just write it for answer, so it may contain errors
$tmp = array();
foreach($array as $k=>$v){
$tmp[$array[$k][$key]][] = $v;
}
if($sortKeys)
ksort($tmp);
return $tmp;
}
并像
一样使用它print_r(sortBy(mySQLSelect(),'job_type'));