使数组值唯一

时间:2016-09-06 02:03:48

标签: php arrays

这是动态数组。我试图删除重复的值,只合并一个。例如需要删除[0] => 1/2/48 & [1] => 1/2/48/56并且只有[2] => 1/2/48/56/58

Array(
    [0] => 1/2/48
    [1] => 1/2/48/56
    [2] => 1/2/48/56/58
    [3] => 1/2/245
    [4] => 1/2/245/246
    [5] => 1/2/265
)

所以数组应该看起来像

Array(
    [0] => 1/2/48/56/58
    [1] => 1/2/245/246
    [2] => 1/2/265
)

2 个答案:

答案 0 :(得分:2)

一种方法

$a = [
    '1/2/48',
    '1/2/48/56',
    '1/2/48/56/58',
    '1/2/245',
    '1/2/245/246',
    '1/2/265'
];

$result = array_values(
    array_filter($a, function ($value, $index) use ($a) {
        return !isset($a[$index + 1]) || 
               strpos($a[$index + 1], $value) !== 0;
    }, ARRAY_FILTER_USE_BOTH)
);

这假设您的输入数组$a按照您显示的顺序排序。否则你需要先对它进行排序。

答案 1 :(得分:1)

如果您的php版本为5.6.0,并且您没有像

那样对数组进行排序
$a = [
    '1/2/245/246',
    '1/2/48',
    '1/2/48/56',
    '1/2/245',
    '1/2/265',
    '1/2/48/56/58'
];

你可以这样尝试

$result = array_values(
        array_filter($a, function ($value) use ($a) {
            $is_exists = false;
            foreach ($a as $v){
                if (($v !== $value) && (strpos($v, $value) !== FALSE)){
                    $is_exists = true;
                    break;
                }
            }
            return !$is_exists;
        })
    );