使多维数组唯一并保持其结构
Make mulitdimensional array unique and keep its structure
我得到了一个包含多个会话 ID 和字段数据数组的多维数组,如下所示:
Array
(
[102] => Array
(
[session_id] => A11.. etc
[fields] => Array
(
[0] => Array
(
[date_time] => 2013-03-25 16:28:56
[ip_address] => xx.xxx.x.xxx
[user_name] => public.static
[session_type] => Start
)
[1] => Array
(
[date_time] => 2013-03-25 16:28:56
[ip_address] => xx.xxx.x.xxx
[user_name] => public.static
[session_type] => Start
)
如您所见,前 2 个字段数组记录包含相同的数据。到目前为止,我已经编写了以下 PHP 代码,使其唯一并按日期排序。
for($i = 0; $i<count($unsortedOutput); $i++) {
usort($unsortedOutput[$i]['fields'], 'sortFunction');
$unique[] = array_map('unserialize', array_unique(array_map('serialize', $unsortedOutput[$i]['fields'])));
}
这有效,但是当我打印 $unique
数组时,它(如预期的那样)删除了 [session_id]
和 [fields]
键:
Array
(
[102] => Array
(
[0] => Array
(
[date_time] => 2013-03-25 16:28:56
[ip_address] => 94.229.1.233
[user_name] => public.static
[session_type] => Start
)
我的问题是:
如何在保持整个结构的同时使我的多维数组唯一。我觉得我很接近,但无法弄清楚其余部分。
作为替代方案,您也可以使用 foreach
和 &
引用每个副本来进行更改:
foreach($unsortedOutput as &$o) {
usort($o['fields'], 'sortFunction');
$o['fields'] = array_map('unserialize', array_unique(array_map('serialize', $o['fields'])));
}
我得到了一个包含多个会话 ID 和字段数据数组的多维数组,如下所示:
Array
(
[102] => Array
(
[session_id] => A11.. etc
[fields] => Array
(
[0] => Array
(
[date_time] => 2013-03-25 16:28:56
[ip_address] => xx.xxx.x.xxx
[user_name] => public.static
[session_type] => Start
)
[1] => Array
(
[date_time] => 2013-03-25 16:28:56
[ip_address] => xx.xxx.x.xxx
[user_name] => public.static
[session_type] => Start
)
如您所见,前 2 个字段数组记录包含相同的数据。到目前为止,我已经编写了以下 PHP 代码,使其唯一并按日期排序。
for($i = 0; $i<count($unsortedOutput); $i++) {
usort($unsortedOutput[$i]['fields'], 'sortFunction');
$unique[] = array_map('unserialize', array_unique(array_map('serialize', $unsortedOutput[$i]['fields'])));
}
这有效,但是当我打印 $unique
数组时,它(如预期的那样)删除了 [session_id]
和 [fields]
键:
Array
(
[102] => Array
(
[0] => Array
(
[date_time] => 2013-03-25 16:28:56
[ip_address] => 94.229.1.233
[user_name] => public.static
[session_type] => Start
)
我的问题是:
如何在保持整个结构的同时使我的多维数组唯一。我觉得我很接近,但无法弄清楚其余部分。
作为替代方案,您也可以使用 foreach
和 &
引用每个副本来进行更改:
foreach($unsortedOutput as &$o) {
usort($o['fields'], 'sortFunction');
$o['fields'] = array_map('unserialize', array_unique(array_map('serialize', $o['fields'])));
}