如何将结果更改为数组?
问题描述:
我从查询结果:如何将结果更改为数组?
array (
[0]=>array (
"id"=>"3"
"role_id"=> "62"
"user_id"=> "20"
"service_id"=> "1"
"field_id"=> "4"
"value"=> "asdfgh"
)
[1]=>array (
"id"=> "4"
"role_id"=> "62"
"user_id"=> "20"
"service_id"=> "2"
"field_id"=> "3"
"value"=> "qwerty"
)
[2]=>array (
"id"=> "5"
"role_id"=> "62"
"user_id"=> "20"
"service_id"=> "2"
"field_id"=> "4"
"value"=> "asdfgh"
)
[3]=>array (
"id"=> "6"
"role_id"=> "62"
"user_id"=> "20"
"service_id"=> "2"
"field_id"=> "16"
"value"=> "zxcvbn"
)
)
我想安排这个数据是这样的:
$roles = array(
'services' => array(
[2] => array(// this [2] is service_id
'fields'=>array(
[0]=>array(
"id"=>"16", "value"=>"zxcvbn"
)
[1]=>array(
"id"=>"4", "value"=>"asdfgh"
)
[2]=>array(
"id"=>"3", "value"=>"qwerty"
)
)
[1] => array(// this [1] is service_id
'fields'=>array(
[0]=>array(
"id"=>"4", "value"=>"asdfgh"
)
)
)
)
)
结果首先被分类,然后ROLE_ID通过的service_id。
我想显示表中每行是一个单独的角色,在行中我想显示按服务分组的字段。
怎么办?
我被困在这里:
$roles = array();
foreach($resultArray as $ra){
$roles[$ra['role_id']] = array(
...
)
}
现在我想...
$temp_role = null;
$roles = array();
foreach($resultArray as $ra){
if($ra['role_id']!=$temp_role){
$temp_role = $ra['role_id']
... something like this, but is it a good idea?
答
在这里你去;
<?php
$initial = array (
0=>array (
"id"=>"3",
"role_id"=> "62",
"user_id"=> "20",
"service_id"=> "1",
"field_id"=> "4",
"value"=> "asdfgh"
),
1=>array (
"id"=> "4",
"role_id"=> "62",
"user_id"=> "20",
"service_id"=> "2",
"field_id"=> "3",
"value"=> "qwerty"
),
2=>array (
"id"=> "5",
"role_id"=> "62",
"user_id"=> "20",
"service_id"=> "2",
"field_id"=> "4",
"value"=> "asdfgh"
),
3 =>array (
"id"=> "6",
"role_id"=> "62",
"user_id"=> "20",
"service_id"=> "2",
"field_id"=> "16",
"value"=> "zxcvbn"
)
);
$roles = array(
'services' => array()
);
foreach($initial as $key => $value) {
if (!isset($roles['services'][$value['service_id']]['fields'])) {
$roles['services'][$value['service_id']]['fields'] = array();
}
$roles['services'][$value['service_id']]['fields'][] = array(
'id' => $value['field_id'],
'value' => $value['value']
);
}
echo '<pre>';
print_r($roles);
echo '</pre>';
?>
结果
Array
(
[services] => Array
(
[1] => Array
(
[fields] => Array
(
[0] => Array
(
[id] => 4
[value] => asdfgh
)
)
)
[2] => Array
(
[fields] => Array
(
[0] => Array
(
[id] => 3
[value] => qwerty
)
[1] => Array
(
[id] => 4
[value] => asdfgh
)
[2] => Array
(
[id] => 16
[value] => zxcvbn
)
)
)
)
)
+0
你的回答是我第一次遇到[PHPFiddle](http://phpfiddle.org)。看起来比[Codepad](http://codepad.org)和其他类似工具更有特色。这是一个upvote! – 2013-04-26 22:34:34
+0
太棒了,谢谢 – Nips 2013-04-26 22:36:36
答
$services = array();
foreach ($resultArray as $v) {
if(! isset($services[$v['service_id']])) {
$services[$v['service_id']] = array('fields' => array());
}
$services[$v['service_id']]['fields'][] = array('id' => $v['field_id'], 'value' => $v['value']);
}
$roles = array('services' => $services);
什么是你试图让它进入你的预计结束数组? – Jon 2013-04-26 22:11:40