Php 无法删除重复值并从数组中提取值

Php 无法删除重复值并从数组中提取值,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我有一个变量,它以以下格式打印数组。我希望获取id的值,但不应该有重复的值。根据给定的数组,我想要的id的值是 1,2,3,4 为了获得唯一值,我尝试了以下代码 array_unique($value, SORT_REGULAR); foreach( $value as $array => $pervalue) { } 为了获取值,我使用了以下代码 array_unique($value, SORT_REGULAR); foreach( $value as $array =>

我有一个变量,它以以下格式打印数组。我希望获取id的值,但不应该有重复的值。根据给定的数组,我想要的id的值是

1,2,3,4
为了获得唯一值,我尝试了以下代码

array_unique($value, SORT_REGULAR);
foreach( $value as $array => $pervalue) 
{
}
为了获取值,我使用了以下代码

array_unique($value, SORT_REGULAR);
foreach( $value as $array => $pervalue) 
{
}
但是我仍然得到了重复的值,并且id的值没有被获取

下面是数组

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

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [id] => 1
                )

            [1] => Array
                (
                    [id] => 3
                )

            [2] => Array
                (
                    [id] => 8
                )
        )

    [1] => Array
        (
            [0] => Array
                (
                    [id] => 1
                )
        )

    [2] => Array
        (
            [0] => Array
                (
                    [id] => 3
                )

            [1] => Array
                (
                    [id] => 2
                )
        )
)
echo”“;
打印(价值);
回声“;
排列
(
[0]=>阵列
(
[0]=>阵列
(
[id]=>1
)
[1] =>阵列
(
[id]=>3
)
[2] =>阵列
(
[id]=>8
)
)
[1] =>阵列
(
[0]=>阵列
(
[id]=>1
)
)
[2] =>阵列
(
[0]=>阵列
(
[id]=>3
)
[1] =>阵列
(
[id]=>2
)
)
)

正如我在评论中所说,最好的方法可能是重新构造输入数组。在您提供之前的代码之前,我们只能在生成数组后提供帮助

如果您还没有处理每个元素,那么Array_unique非常好。因为您需要遍历数组来隔离id值,所以您还可以在执行时清除重复项。这里有一些方法

*注意:我使用临时键来避免调用array_unique。不会存储重复的值

代码:演示:

输出:

array_walk_recursive($values, function ($v) use (&$result){
    $result[$v] = $v;
});
sort($result);
var_export($result);  // same output as above 
如果你想使用递归,这里有一个干净的方法:


首先展平,或者使用递归函数,或者循环数组\列调用。正如您所发现的那样,单靠数组_unique是不行的。您是如何构建输入阵列的?可能最好在声明$value的同时进行重组。请给我们更多的代码。我们可以提供一个“事后”的解决方案,但尽早重组可能是最好的。感谢您提供的递归示例。我会记住那个方法!此方法id仅适用于子集数为3的情况。只有OP会知道这是否是一个合适的解决方案,但这不是一个灵活的解决方案。
array_walk_recursive($values, function ($v) use (&$result){
    $result[$v] = $v;
});
sort($result);
var_export($result);  // same output as above