我有一个多维数组,我需要按唯一性进行排序,因为我有重复的记录,所以我需要array_unique
来遍历数组并删除值的重复项,例如
Array
(
[0] => Array
(
[id] => 324
[time_start] => 1301612580
[level] => 0.002
[input_level] => 0.002
)
[1] => Array
(
[id] => 325
[time_start] => 1301612580
[level] => 0.002
[input_level] => 0.002
)
[2] => Array
(
[id] => 326
[time_start] => 1301612580
[level] => 0.002
[input_level] => 0.002
)
)
有重复的time_start
,它们都是相同的,level
和input_level
但它们不受影响,只有匹配time_start
时才会受到影响应该删除它并处理整个数组(数组比你想象的要大,但我刚发布了一个小数组的例子)。应该删除欺骗并返回如下:
Array
(
[0] => Array
(
[id] => 324
[time_start] => 1301612580
[level] => 0.002
[input_level] => 0.002
)
)
我发现的问题不起作用:
答案 0 :(得分:9)
$input = array( /* your data */ );
$temp = array();
$keys = array();
foreach ( $input as $key => $data ) {
unset($data['id']);
if ( !in_array($data, $temp) ) {
$temp[] = $data;
$keys[$key] = true;
}
}
$output = array_intersect_key($input, $keys);
或
$input = array( /* your data */ );
$temp = $input;
foreach ( $temp as &$data ) {
unset($data['id']);
}
$output = array_intersect_key($input, array_unique($temp));
答案 1 :(得分:5)
$temp = array();
array_filter($yourArray, function ($v) use (&$temp) {
if (in_array($v['time_start'], $temp)) {
return false;
} else {
array_push($temp, $v['time_start']);
return true;
}
});
使用array_filter()
,它将根据回调的结果过滤数组(我使用了自PHP 5.3起可以使用的匿名函数)。 time_start
值被收集到一个临时数组中。
答案 2 :(得分:1)
我想你只需要走它:
$usedVals = array();
$outArray = array();
foreach ($targetArray as $arrayItem)
{
if (!in_array($arrayItem['time_start'],$usedVals))
{
$outArray[] = $arrayItem;
$usedVals[] = $arrayItem['time_start'];
}
}
return $outArray;
答案 3 :(得分:0)
$uniq = array();
foreach($no_unique as $k=>$v) if(!isset($uniq[$v['time_start']])) $uniq[$v['time_start']] = $v;
$uniq = array_values($uniq);