PHP-多维数组中按值唯一的数组

PHP-多维数组中按值唯一的数组,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我只想通过user\u id 输入数组: array (size=3) 0 => array (size=3) 'user_id' => string '3' (length=1) 'rate' => string '0' (length=1) 'note' => string 'a' (length=1) 1 => array (size=3) 'user_id' => string

我只想通过
user\u id

输入数组:

array (size=3)
  0 => 
    array (size=3)
      'user_id' => string '3' (length=1)
      'rate' => string '0' (length=1)
      'note' => string 'a' (length=1)
  1 => 
    array (size=3)
      'user_id' => string '3' (length=1)
      'rate' => string '2' (length=1)
      'note' => string 'b' (length=1)
  2 => 
    array (size=3)
      'user_id' => string '4' (length=1)
      'rate' => string '3' (length=1)
      'note' => string 'c' (length=1)
array (size=3)
  0 => 
    array (size=3)
      'user_id' => string '3' (length=1)
      'rate' => string '0' (length=1)
      'note' => string 'a' (length=1)
  1 => 
    array (size=3)
      'user_id' => string '4' (length=1)
      'rate' => string '3' (length=1)
      'note' => string 'c' (length=1)
输出:

array (size=3)
  0 => 
    array (size=3)
      'user_id' => string '3' (length=1)
      'rate' => string '0' (length=1)
      'note' => string 'a' (length=1)
  1 => 
    array (size=3)
      'user_id' => string '3' (length=1)
      'rate' => string '2' (length=1)
      'note' => string 'b' (length=1)
  2 => 
    array (size=3)
      'user_id' => string '4' (length=1)
      'rate' => string '3' (length=1)
      'note' => string 'c' (length=1)
array (size=3)
  0 => 
    array (size=3)
      'user_id' => string '3' (length=1)
      'rate' => string '0' (length=1)
      'note' => string 'a' (length=1)
  1 => 
    array (size=3)
      'user_id' => string '4' (length=1)
      'rate' => string '3' (length=1)
      'note' => string 'c' (length=1)
到目前为止:

$result1 = array_unique($inputArray, SORT_REGULAR);
$result2 = array_map("unserialize", array_unique(array_map("serialize", $inputArray)));

这应该适合您:

<?php

    $arr = array(
            array(
                'user_id' => '3',
                'rate' => '0',
                'note' => 'a'
            ),
            array(
                'user_id' => '3',
                'rate' => '2',
                'note' => 'b'
            ),
            array(
                'user_id' => '4',
                'rate' => '3',
                'note' => 'c' 
            )
        );

    $tmp = array();

    foreach($arr as $key => $innerArray) {
        if(in_array($innerArray["user_id"], $tmp))
            unset($arr[$key]);
        else
            $tmp[] = $innerArray["user_id"];
    }

    print_r($arr);

?>

这应该适合您:

<?php

    $arr = array(
            array(
                'user_id' => '3',
                'rate' => '0',
                'note' => 'a'
            ),
            array(
                'user_id' => '3',
                'rate' => '2',
                'note' => 'b'
            ),
            array(
                'user_id' => '4',
                'rate' => '3',
                'note' => 'c' 
            )
        );

    $tmp = array();

    foreach($arr as $key => $innerArray) {
        if(in_array($innerArray["user_id"], $tmp))
            unset($arr[$key]);
        else
            $tmp[] = $innerArray["user_id"];
    }

    print_r($arr);

?>
试试这个:

$result=array()

试试这个:

$result=array()


如果您正在运行PHP>=5.6,则以下操作将起作用:

$data = [
    [
      'user_id' => '3',
      'rate' => '0',
      'note' => 'a',
    ],
    [
      'user_id' => '3',
      'rate' => '2',
      'note' => 'b',
    ],
    [
      'user_id' => '4',
      'rate' => '3',
      'note' => 'c',
    ],
];

$result = array_filter(
    $data,
    function ($value, $key) use ($data) {
        return $key === array_search($value['user_id'], array_column($data,'user_id'));
    },
    ARRAY_FILTER_USE_BOTH
);
var_dump($result);

如果您正在运行PHP>=5.6,则以下操作将起作用:

$data = [
    [
      'user_id' => '3',
      'rate' => '0',
      'note' => 'a',
    ],
    [
      'user_id' => '3',
      'rate' => '2',
      'note' => 'b',
    ],
    [
      'user_id' => '4',
      'rate' => '3',
      'note' => 'c',
    ],
];

$result = array_filter(
    $data,
    function ($value, $key) use ($data) {
        return $key === array_search($value['user_id'], array_column($data,'user_id'));
    },
    ARRAY_FILTER_USE_BOTH
);
var_dump($result);

如果
user\u id
只是一个int或字符串,则可以将其用作索引,如下所示:

$a = [
    [
        'id' => 1,
    ],
    [
        'id' => 2,
    ],
    [
        'id' => 3,
    ],
    [
        'id' => 1,
    ],
];

$b = array_reduce($a, function($carry, $item) {
    $carry[$item['id']] = $item;
    return $carry;
}, []);

var_dump($b);

// Or more plainly like this:
$b = [];
foreach ($a as $val) {
    $b[$val['id']] = $val;
}

var_dump($b);

// If you want numerical indexes, just do this
$b = array_values($b);

如果
user\u id
只是一个int或字符串,则可以将其用作索引,如下所示:

$a = [
    [
        'id' => 1,
    ],
    [
        'id' => 2,
    ],
    [
        'id' => 3,
    ],
    [
        'id' => 1,
    ],
];

$b = array_reduce($a, function($carry, $item) {
    $carry[$item['id']] = $item;
    return $carry;
}, []);

var_dump($b);

// Or more plainly like this:
$b = [];
foreach ($a as $val) {
    $b[$val['id']] = $val;
}

var_dump($b);

// If you want numerical indexes, just do this
$b = array_values($b);

1.你可以试试这个

$result = array_reverse(array_values(array_column(
    array_reverse($data),
    null,
    'user_id'
)));
返回完整的数组或对象也可能为NULL(这是 与索引_键一起使用可重新索引数组)

2.如果您使用sql查询获取记录,则可以使用如下的
groupby
子句:

GROUP BY user_id    

参考:

1。您只需尝试一下即可

$result = array_reverse(array_values(array_column(
    array_reverse($data),
    null,
    'user_id'
)));
返回完整的数组或对象也可能为NULL(这是 与索引_键一起使用可重新索引数组)

2.如果您使用sql查询获取记录,则可以使用如下的
groupby
子句:

GROUP BY user_id    


Ref:

post按整个数组排序的@Rizier123的可能重复项,这是按中的唯一值排序的array@Rizier123不是,他只想通过ID删除副本。只需使用foreach循环和临时容器即可fine@Ghost想找些更别致的东西吗,并非
brute force
post中所有可能重复的@Rizier123都是按整个数组排序的,这是按中的唯一值排序的array@Rizier123不是,他只想通过ID删除副本。只需使用foreach循环和临时容器即可fine@Ghost想找些更别致的东西吗,不是蛮力所有不需要的东西,对吧?在其他语言中,如果在数组上循环时取消设置数组中的键,则可能会发生不好的情况。在php中行为保证是正确的吗?@Sumurai8在这里它不会产生任何问题,不需要unset,对吗?在其他语言中,如果在数组上循环时取消设置数组中的键,则可能会发生不好的情况。在php中行为保证是正确的吗?@Sumurai8在这里它不会产生任何问题。Lol刚刚看到它:哇,我快疯了。我用德语打开了手册(),没有任何关于旗帜的内容。然后我把它改成了英语(),它实际上在很多情况下都非常有用,我很高兴我在我的产品盒上运行了5.6。这显示了用不同的翻译更新PHP文档需要多长时间!这就是我通常在英语中使用它的原因。(也更容易阅读)但是哇,我在手册中写了10分钟,我没有注意到:DLol只是看到了:哇,我快疯了。我用德语打开了手册(),没有任何关于旗帜的内容。然后我把它改成了英语(),它实际上在很多情况下都非常有用,我很高兴我在我的产品盒上运行了5.6。这显示了用不同的翻译更新PHP文档需要多长时间!这就是我通常在英语中使用它的原因。(也更容易阅读)但是哇,我在手册上写了10分钟,我没有注意到:D