从php中删除从数组中完全删除的重复值

时间:2018-04-16 12:22:11

标签: php arrays duplicates unique

我想从数组中删除相同的值。 例如: 这是阵列。

Array ( [0] => 1 [1] => 63 [2] => 1 )

核心php中是否有任何函数或东西只返回不重复的值,即索引号1和删除索引0和2 的值,我想要结果

Array ( [1] => 63) 

有什么办法吗?

4 个答案:

答案 0 :(得分:4)

您可以使用array_filter()array_count_values()来检查计数是否大于1。

<?php
$data = [1, 63, 1];

$data = array_filter($data, function ($value) use ($data) {
    return !(array_count_values($data)[$value] > 1);
});

print_r($data);

https://3v4l.org/uIVLN

<强>结果:

Array
(
    [1] => 63
)

使用多个欺骗行为也可以正常工作:https://3v4l.org/eJSTY

答案 1 :(得分:1)

一种选择是使用array_count_values来计算值。循环并仅推送1

$arr = array(1,63,1);
$arrKey = array_flip( $arr ); //Store the key

$result = array();  
foreach( array_count_values($arr) as $k => $v ) {
    if ( $v === 1 ) $result[ $arrKey[$k] ] = $k;
}

echo "<pre>";
print_r( $result );
echo "</pre>";

这将导致:

Array
(
    [1] => 63
)

Doc:array_count_values

答案 2 :(得分:1)

我认为最好的解决方案如下:

function removeDuplicates(array $initialArray) : array 
{
    // Remove duplicate values from an array
    $uniqueValues = array_unique($initialArray);

    // Computes the difference of arrays with additional index check
    $duplicateValues = array_diff_assoc($initialArray, $uniqueValues);

    // Removed any values in both arrays
    return array_diff($uniqueValues, $duplicateValues);
}

此解决方案在PHP中使用以下功能:

array_unique

array_diff_asoc

array_diff

答案 3 :(得分:0)

您可以将array_keys()与搜索值一起用作第二个参数,以查看值存在的次数。

$array = [1, 63, 1, 12, 64, 12];

$new = [];
foreach ($array as $value) {
    // Get all keys that have this value. If there's only one, save it.
    if (count(array_keys($array, $value)) == 1) {
        $new[] = $value;
    }
}

演示:https://3v4l.org/G1DCg

与其他答案相比,我不知道这种表现。我把剖析留给别人。