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

时间:2018-04-01 06:49:58

标签: php arrays multidimensional-array

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

        Requires: models.Requires{
                Name: “db",

                },
            },

为了获得独特的价值,我尝试了这段代码

1,2,3,4

并获取我使用此代码的值

array_unique($value, SORT_REGULAR);

但我仍然得到重复的值,并且没有获取id的值

以下是数组

foreach( $value as $array => $pervalue) 
{
}

2 个答案:

答案 0 :(得分:2)

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

如果您尚未处理每个元素,则Array_unique非常棒。因为您需要遍历数组以隔离您的id值,所以您可以随意清除重复项。以下是几种方式......

*注意我正在使用临时密钥以避免调用array_unique。不会存储重复的值。

代码:演示:https://3v4l.org/BWT1R

$values = [
    [
        ["id" => 1],
        ["id" => 3],
        ["id" => 8]
    ],
    [
        ["id" => 1]
    ],
    [
        ["id" => 3],
        ["id" => 2]
    ]
];

$unique_ids = array_column(array_merge(...$values), "id", "id");
sort($unique_ids);
var_export($unique_ids);
echo "\n\n";

foreach ($values as $groups) {
    foreach ($groups as $rows) {
        $result[$rows["id"]] = $rows["id"];
    }
}
sort($result);
var_export($result);

输出:

array (
  0 => 1,
  1 => 2,
  2 => 3,
  3 => 8,
)

array (
  0 => 1,
  1 => 2,
  2 => 3,
  3 => 8,
)

如果你想使用递归,这里有一个干净的方法:

array_walk_recursive($values, function ($v) use (&$result){
    $result[$v] = $v;
});
sort($result);
var_export($result);  // same output as above 

答案 1 :(得分:0)

    $numbers = array(
        array(
            array(
                'id' => 1
            ),
            array(
                'id' => 3
            ),
            array(
                'id' => 4
            ),
        ),
        array(
            array(
                'id' => 1
            ),
        ),
        array(
            array(
                'id' => 3
            ),
            array(
                'id' => 2
            ),
        ),
    );

    $mag_numbers = array_merge($numbers[0], $numbers[1], $numbers[2]);
    $needed_result = array_column($mag_numbers, 'id');
    $final_needed_result = array_unique($needed_result, SORT_REGULAR);


    foreach( $final_needed_result as $single) 
    {
        var_dump($single);
    }