我在PHP中有一个数组:
array (size=xxx)
0 =>
array (size=9)
'cat' => string 'FIRST CAT'
'dur' => string '10'
'type' => string 'Type description 10'
'start' => string '00:00'
'end' => string '01:00'
'desc' => string 'Event description 10-1'
'price' => string 'xxx'
'extra' => string 'yyy'
1 =>
array (size=9)
'cat' => string ''
'dur' => string ''
'type' => string ''
'start' => string '01:00'
'end' => string '02:00'
'desc' => string 'Event description 10-2'
'price' => string ''
'extra' => string ''
2 =>
array (size=9)
'cat' => string ''
'dur' => string ''
'type' => string ''
'start' => string '02:00'
'end' => string '03:00'
'desc' => string 'Event description 10-3'
'price' => string ''
'extra' => string ''
3 =>
array (size=9)
'cat' => string ''
'dur' => string '20'
'type' => string 'Type description 20'
'start' => string '00:00'
'end' => string '01:00'
'desc' => string 'Event description 20-1'
'price' => string 'xxx'
'extra' => string 'yyy'
4 =>
array (size=9)
'cat' => string ''
'dur' => string ''
'type' => string ''
'start' => string '01:00'
'end' => string '02:00'
'desc' => string 'Event description 20-2'
'price' => string ''
'extra' => string ''
5 =>
array (size=9)
'cat' => string ''
'dur' => string ''
'type' => string 'Type description 21'
'start' => string '00:00'
'end' => string '01:00'
'desc' => string 'Event description 21-1'
'price' => string 'xxx'
'extra' => string 'yyy'
6 =>
array (size=9)
'cat' => string ''
'dur' => string ''
'type' => string ''
'start' => string '01:00'
'end' => string '02:00'
'desc' => string 'Event description 21-2'
'price' => string ''
'extra' => string ''
7 =>
array (size=9)
'cat' => string 'SECOND CAT'
'dur' => string '10'
'type' => string 'Type description 100'
'start' => string '00:00'
'end' => string '01:00'
'desc' => string 'Event description 100-1'
'price' => string 'xxx'
'extra' => string 'yyy'
8 =>
array (size=9)
'cat' => string ''
'dur' => string ''
'type' => string ''
'start' => string '01:00'
'end' => string '02:00'
'desc' => string 'Event description 100-2'
'price' => string ''
'extra' => string ''
9 =>
array (size=9)
'cat' => string ''
'dur' => string '20'
'type' => string 'Type description 200'
'start' => string '00:00'
'end' => string '01:00'
'desc' => string 'Event description 200-1'
'price' => string 'xxx'
'extra' => string 'yyy'
10 =>
array (size=9)
'cat' => string ''
'dur' => string ''
'type' => string ''
'start' => string '01:00'
'end' => string '02:00'
'desc' => string 'Event description 200-2'
'price' => string ''
'extra' => string ''
11 =>
array (size=9)
'cat' => string ''
'dur' => string ''
'type' => string 'Type description 210'
'start' => string '00:00'
'end' => string '01:00'
'desc' => string 'Event description 210-1'
'price' => string 'xxx'
'extra' => string 'yyy'
etc...
我需要先按cat
分组此数组,然后按dur
分组,再type
。这个type
数组有两个字符串 - price
和extra
,另一个数组包含所有事件数据 - start
,end
和{{1 }}。最终的数组轮廓(基于上面的示例)应如下所示:
desc
将现有数组转换为最终需要的数组的最简单方法是什么?
答案 0 :(得分:1)
以下是您要找的内容:
$out = array();
foreach ($arr as $key => $value){
$cat = $value['cat'];
$dur = $value['dur'];
$type = $value['type'];
$out[$cat][$dur][$type][] = $value['start'].', '.$value['end'].', '.$value['desc'];
}
print_r($out);
修改强>
我修改了我的代码,因为当类别为空时请求使用最后一个类别。所以,这是我修改过的代码:
$out = array();
$last_cat = '';
foreach ($arr as $key => $value){
$cat = $value['cat'];
$dur = $value['dur'];
$type = $value['type'];
if (empty($cat)){
$cat = $last_cat;
} else {
$last_cat = $cat;
}
$out[$cat][$dur][$type][] = $value['start'].', '.$value['end'].', '.$value['desc'];
}
print_r($out);
此代码的输出如下:
[FIRST CAT] => Array(
[10] => Array(
[Type description 10] => Array(
[0] => 00:00, 01:00, Event description 10-1
)
)
[] => Array(
[] => Array(
[0] => 01:00, 02:00, Event description 10-2
[1] => 02:00, 03:00, Event description 10-3
[2] => 01:00, 02:00, Event description 20-2
[3] => 01:00, 02:00, Event description 21-2
)
[Type description 21] => Array(
[0] => 00:00, 01:00, Event description 21-1
)
)
[20] => Array(
[Type description 20] => Array(
[0] => 00:00, 01:00, Event description 20-1
)
)
)
[SECOND CAT] => Array(
[10] => Array(
[Type description 100] => Array(
[0] => 00:00, 01:00, Event description 100-1
)
)
[] => Array(
[] => Array(
[0] => 01:00, 02:00, Event description 100-2
[1] => 01:00, 02:00, Event description 200-2
)
[Type description 210] => Array(
[0] => 00:00, 01:00, Event description 210-1
)
)
[20] => Array(
[Type description 200] => Array(
[0] => 00:00, 01:00, Event description 200-1
)
)
)
答案 1 :(得分:0)
我认为最好使用http://php.net/manual/en/function.ksort.php ksort函数。