基于值(不是数组键)的多维数组唯一

Mac*_*Mac 3 php arrays multidimensional-array

我有一个多维数组,我需要按唯一性排序,因为我有重复的记录,所以我需要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
        )
)
Run Code Online (Sandbox Code Playgroud)

有重复的time_start,他们都是一样的,也levelinput_level但他们没有受到影响,只是如果有匹配time_start它应该删除它,全阵列式处理(数组比你想象的大,但我只贴小数组的例子).应该删除欺骗并返回如下:

Array
(
    [0] => Array
        (
            [id] => 324
            [time_start] => 1301612580
            [level] => 0.002
            [input_level] => 0.002
        )
)
Run Code Online (Sandbox Code Playgroud)

我发现的问题不起作用:

hsz*_*hsz 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);
Run Code Online (Sandbox Code Playgroud)

要么

$input = array( /* your data */ );
$temp  = $input;

foreach ( $temp as &$data ) {
    unset($data['id']);
}

$output = array_intersect_key($input, array_unique($temp));
Run Code Online (Sandbox Code Playgroud)


kap*_*apa 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;
    }
});
Run Code Online (Sandbox Code Playgroud)

使用array_filter()将根据回调的结果过滤数组(我使用了自PHP 5.3以来可以使用的匿名函数).这些time_start值被收集到一个临时数组中.