Hướng dẫn how do you make a multidimensional array unique in php? - làm thế nào để bạn tạo một mảng đa chiều duy nhất trong php?

Làm thế nào tôi có thể loại bỏ các giá trị trùng lặp khỏi một mảng đa chiều trong PHP?

Mảng ví dụ:

Array
(
    [0] => Array
    (
        [0] => abc
        [1] => def
    )

    [1] => Array
    (
        [0] => ghi
        [1] => jkl
    )

    [2] => Array
    (
        [0] => mno
        [1] => pql
    )

    [3] => Array
    (
        [0] => abc
        [1] => def
    )

    [4] => Array
    (
        [0] => ghi
        [1] => jkl
    )

    [5] => Array
    (
        [0] => mno
        [1] => pql
    )

)

Hỏi ngày 21 tháng 11 năm 2008 lúc 2:50Nov 21, 2008 at 2:50

Hướng dẫn how do you make a multidimensional array unique in php? - làm thế nào để bạn tạo một mảng đa chiều duy nhất trong php?

1

Đây là một cách khác. Không có biến trung gian được lưu.

Chúng tôi đã sử dụng điều này để giảm kết quả sao chép từ một loạt các truy vấn chồng chéo.

$input = array_map("unserialize", array_unique(array_map("serialize", $input)));

Hướng dẫn how do you make a multidimensional array unique in php? - làm thế nào để bạn tạo một mảng đa chiều duy nhất trong php?

Jeromegamez

3.1521 Huy hiệu vàng22 Huy hiệu bạc36 Huy hiệu đồng1 gold badge22 silver badges36 bronze badges

Đã trả lời ngày 3 tháng 6 năm 2009 lúc 18:12Jun 3, 2009 at 18:12

Daveilersdaveilersdaveilers

7,4361 Huy hiệu vàng16 Huy hiệu bạc4 Huy hiệu đồng1 gold badge16 silver badges4 bronze badges

12

Kể từ 5.2.9, bạn có thể sử dụng

array_unique($array, SORT_REGULAR);
6 nếu bạn sử dụng cờ
array_unique($array, SORT_REGULAR);
7 như vậy:

array_unique($array, SORT_REGULAR);

Điều này làm cho chức năng so sánh các yếu tố cho sự bình đẳng như thể

array_unique($array, SORT_REGULAR);
8 đang được sử dụng, điều này hoàn hảo cho trường hợp của bạn.

Đầu ra

Array
(
    [0] => Array
        (
            [0] => abc
            [1] => def
        )

    [1] => Array
        (
            [0] => ghi
            [1] => jkl
        )

    [2] => Array
        (
            [0] => mno
            [1] => pql
        )

)

Tuy nhiên, hãy ghi nhớ rằng các tài liệu nêu rõ:

array_unique($array, SORT_REGULAR);
6 không nhằm mục đích làm việc trên các mảng đa chiều.

Đã trả lời ngày 22 tháng 8 năm 2013 lúc 7:01Aug 22, 2013 at 7:01

Ja͢ckja͢ckJa͢ck

168K36 Huy hiệu vàng256 Huy hiệu bạc 305 Huy hiệu Đồng36 gold badges256 silver badges305 bronze badges

14

Tôi đã có một vấn đề tương tự nhưng tôi đã tìm thấy một giải pháp làm việc 100% cho nó.

";
print_r($arr);
echo "unique*********************
"; print_r(super_unique($arr,'titel')); ?>

Hướng dẫn how do you make a multidimensional array unique in php? - làm thế nào để bạn tạo một mảng đa chiều duy nhất trong php?

Martin

21.2k8 Huy hiệu vàng62 Huy hiệu bạc117 Huy hiệu đồng8 gold badges62 silver badges117 bronze badges

Đã trả lời ngày 9 tháng 5 năm 2012 lúc 10:48May 9, 2012 at 10:48

3

Cách khác. Sẽ bảo quản chìa khóa là tốt.

function array_unique_multidimensional($input)
{
    $serialized = array_map('serialize', $input);
    $unique = array_unique($serialized);
    return array_intersect_key($input, $unique);
}

Đã trả lời ngày 21 tháng 11 năm 2008 lúc 14:36Nov 21, 2008 at 14:36

OisoisOIS

9.6421 Huy hiệu vàng31 Huy hiệu bạc41 Huy hiệu đồng1 gold badge31 silver badges41 bronze badges

1

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

    [1] => Array
        (
            [id] => 2
            [name] => smith
        )

    [2] => Array
        (
            [id] => 3
            [name] => john
        )

    [3] => Array
        (
            [id] => 4
            [name] => robert
        )

)

$temp = array_unique(array_column($array, 'name'));
$unique_arr = array_intersect_key($array, $temp);

Điều này sẽ loại bỏ các tên trùng lặp khỏi mảng. duy nhất bởi chìa khóa

Đã trả lời ngày 23 tháng 2 năm 2018 lúc 6:34Feb 23, 2018 at 6:34

Mahak Choudharymahak ChoudharyMahak Choudhary

1.0661 Huy hiệu vàng15 Huy hiệu bạc13 Huy hiệu đồng1 gold badge15 silver badges13 bronze badges

2

Nếu "loại bỏ các bản sao" có nghĩa là "loại bỏ các bản sao, nhưng hãy để một bản sao ở đó", một giải pháp có thể là áp dụng

Array
(
    [0] => Array
        (
            [0] => abc
            [1] => def
        )

    [1] => Array
        (
            [0] => ghi
            [1] => jkl
        )

    [2] => Array
        (
            [0] => mno
            [1] => pql
        )

)
0 trên "cột định danh" trước tiên và sau đó loại bỏ trong mảng ban đầu, tất cả các phím đã bị xóa khỏi cột mảng:

$array = [
    [
        'id' => '123',
        'foo' => 'aaa',
        'bar' => 'bbb'
    ],
    [
        'id' => '123',
        'foo' => 'ccc',
        'bar' => 'ddd'
    ],
    [
        'id' => '567',
        'foo' => 'eee',
        'bar' => 'fff'
    ]
];

$ids = array_column($array, 'id');
$ids = array_unique($ids);
$array = array_filter($array, function ($key, $value) use ($ids) {
    return in_array($value, array_keys($ids));
}, ARRAY_FILTER_USE_BOTH);

Kết quả là:

Array
(
    [0] => Array
        (
            [id] => 123
            [foo] => aaa
            [bar] => bbb
        )

    [2] => Array
        (
            [id] => 567
            [foo] => eee
            [bar] => fff
        )

)

Đã trả lời ngày 20 tháng 5 năm 2016 lúc 22:14May 20, 2016 at 22:14

Automatixautomatixautomatix

13.1K24 Huy hiệu vàng98 Huy hiệu bạc220 Huy hiệu đồng24 gold badges98 silver badges220 bronze badges

1

Người dùng nhận xét trên tài liệu Array_unique () có nhiều giải pháp cho việc này. Đây là một trong số chúng:

Kenrbnsn tại RBNSN DOT com 27-Sep-2005 12:09
27-Sep-2005 12:09

Một mảng_unique khác cho các mảng đa chiều. Tôi chỉ đã thử nghiệm điều này trên các mảng hai chiều, nhưng nó có thể được khái quát hóa nhiều hơn hoặc được thực hiện để sử dụng đệ quy.

Chức năng này sử dụng các chức năng nối tiếp, Array_unique và làm mất hiệu lực để thực hiện công việc.


function multi_unique($array) {
    foreach ($array as $k=>$na)
        $new[$k] = serialize($na);
    $uniq = array_unique($new);
    foreach($uniq as $k=>$ser)
        $new1[$k] = unserialize($ser);
    return ($new1);
}

Đây là từ http://ca3.php.net/manual/en/function.array-unique.php#57202.

Hướng dẫn how do you make a multidimensional array unique in php? - làm thế nào để bạn tạo một mảng đa chiều duy nhất trong php?

Manoj Sharma

1.4672 Huy hiệu vàng13 Huy hiệu bạc20 Huy hiệu Đồng2 gold badges13 silver badges20 bronze badges

Đã trả lời ngày 21 tháng 11 năm 2008 lúc 3:07Nov 21, 2008 at 3:07

Paige Rutenpaige RutenPaige Ruten

168K36 Huy hiệu vàng175 Huy hiệu bạc196 Huy hiệu Đồng36 gold badges175 silver badges196 bronze badges

0

Nếu bạn cần loại bỏ các bản sao trên các khóa cụ thể, chẳng hạn như ID MySQLI, đây là một funciton đơn giản

$input = array_map("unserialize", array_unique(array_map("serialize", $input)));
0

Điểm thưởng Bạn có thể vượt qua một loạt các phím và thêm một foreach bên ngoài, nhưng nó sẽ chậm hơn 2 lần mỗi khóa bổ sung. You can pass an array of keys and add an outer foreach, but it will be 2x slower per additional key.

Đã trả lời ngày 8 tháng 11 năm 2014 lúc 7:17Nov 8, 2014 at 7:17

Hướng dẫn how do you make a multidimensional array unique in php? - làm thế nào để bạn tạo một mảng đa chiều duy nhất trong php?

r3wtr3wtr3wt

4.5822 Huy hiệu vàng31 Huy hiệu bạc55 Huy hiệu Đồng2 gold badges31 silver badges55 bronze badges

2

Nếu bạn có một mảng như thế này:

(Người dùng là tên của mảng)

$input = array_map("unserialize", array_unique(array_map("serialize", $input)));
1

Và bạn muốn xóa các bản sao ... sau đó:

$input = array_map("unserialize", array_unique(array_map("serialize", $input)));
2

có thể là một giải pháp: p

Đã trả lời ngày 7 tháng 8 năm 2015 lúc 18:45Aug 7, 2015 at 18:45

Hướng dẫn how do you make a multidimensional array unique in php? - làm thế nào để bạn tạo một mảng đa chiều duy nhất trong php?

LimonlimonLimon

1.7327 Huy hiệu vàng31 Huy hiệu bạc58 Huy hiệu Đồng7 gold badges31 silver badges58 bronze badges

1

Rất nhiều người hỏi tôi làm thế nào để tạo ra mảng đa chiều độc đáo. Tôi đã tham khảo từ bình luận của bạn và nó giúp tôi.

Trước hết, nhờ @Jeromegamez @Daveilers cho giải pháp của bạn. Nhưng mỗi lần tôi đưa ra câu trả lời, họ hỏi tôi làm thế nào 'tuần tự hóa' và 'không bình thường hóa' này hoạt động như thế nào. Đó là lý do tại sao tôi muốn chia sẻ lý do của điều này với bạn để nó sẽ giúp nhiều người hiểu được khái niệm đằng sau điều này.

Tôi đang giải thích lý do tại sao chúng tôi sử dụng 'serialize' và 'unserialize' trong các bước:

Bước 1: Chuyển đổi mảng đa chiều thành mảng một chiều

Để chuyển đổi mảng đa chiều thành mảng một chiều, đầu tiên tạo ra biểu diễn luồng byte của tất cả các phần tử (bao gồm cả các mảng lồng nhau) bên trong mảng. Hàm serialize () có thể tạo ra biểu diễn luồng byte của một giá trị. Để tạo biểu diễn luồng byte của tất cả các phần tử, hãy gọi hàm serialize () trong hàm mảng_map () dưới dạng hàm gọi lại. Kết quả sẽ là một mảng một chiều cho dù mảng đa chiều có bao nhiêu cấp.

Bước 2: Làm cho các giá trị duy nhất

Để làm cho mảng một chiều này trở nên độc đáo, hãy sử dụng hàm Array_unique ().

Bước 3: Hoàn nguyên nó thành mảng đa chiều

Mặc dù mảng bây giờ là duy nhất, các giá trị trông giống như biểu diễn luồng byte. Để hoàn nguyên nó trở lại mảng đa chiều, hãy sử dụng hàm unserialize ().

$input = array_map("unserialize", array_unique(array_map("serialize", $input)));

Cảm ơn một lần nữa cho tất cả điều này.

Đã trả lời ngày 1 tháng 9 năm 2016 lúc 11:29Sep 1, 2016 at 11:29

Hướng dẫn how do you make a multidimensional array unique in php? - làm thế nào để bạn tạo một mảng đa chiều duy nhất trong php?

ManishmanishManish

3,2131 Huy hiệu vàng20 Huy hiệu bạc24 Huy hiệu đồng1 gold badge20 silver badges24 bronze badges

Một cách rất dễ dàng và hợp lý để duy nhất một mảng đa chiều như sau,

Nếu bạn có mảng như thế này:

$input = array_map("unserialize", array_unique(array_map("serialize", $input)));
4

Sử dụng

Array
(
    [0] => Array
        (
            [0] => abc
            [1] => def
        )

    [1] => Array
        (
            [0] => ghi
            [1] => jkl
        )

    [2] => Array
        (
            [0] => mno
            [1] => pql
        )

)
1 để giải quyết điều này:

$input = array_map("unserialize", array_unique(array_map("serialize", $input)));
5

Nó sẽ cho bạn kết quả sau:

$input = array_map("unserialize", array_unique(array_map("serialize", $input)));
6

Và nếu bạn muốn sắp xếp lại thứ tự của các phím,

$input = array_map("unserialize", array_unique(array_map("serialize", $input)));
7

Hoạt động này sẽ cung cấp cho bạn các giá trị chính được sắp xếp như thế này:

$input = array_map("unserialize", array_unique(array_map("serialize", $input)));
8

Tôi hy vọng điều này sẽ rõ ràng mọi thứ.

Đã trả lời ngày 19 tháng 1 năm 2018 lúc 13:22Jan 19, 2018 at 13:22

Hướng dẫn how do you make a multidimensional array unique in php? - làm thế nào để bạn tạo một mảng đa chiều duy nhất trong php?

1

Một giải pháp dễ đọc, có lẽ không phải là hiệu quả nhất:

$input = array_map("unserialize", array_unique(array_map("serialize", $input)));
9

graham.reeds

15.9K17 Huy hiệu vàng70 Huy hiệu bạc133 Huy hiệu đồng17 gold badges70 silver badges133 bronze badges

Đã trả lời ngày 19 tháng 6 năm 2009 lúc 19:44Jun 19, 2009 at 19:44

Hướng dẫn how do you make a multidimensional array unique in php? - làm thế nào để bạn tạo một mảng đa chiều duy nhất trong php?

PixelinePixelinepixeline

17.5K11 Huy hiệu vàng80 Huy hiệu bạc109 Huy hiệu đồng11 gold badges80 silver badges109 bronze badges

Như mọi người đang nói

array_unique($array, SORT_REGULAR);
6 rất chậm, đây là đoạn trích tôi sử dụng cho một mảng đa chiều một cấp.

array_unique($array, SORT_REGULAR);
0

Tham chiếu Người dùng đầu tiên đóng góp Lưu ý của trang chức năng

array_unique($array, SORT_REGULAR);
6 trong Php.Net

Đã trả lời ngày 18 tháng 4 năm 2015 lúc 19:01Apr 18, 2015 at 19:01

AnujanujAnuj

3234 Huy hiệu bạc13 Huy hiệu Đồng4 silver badges13 bronze badges

0

Một thay thế cho sê -ri và duy nhất

array_unique($array, SORT_REGULAR);
1

*/

Đã trả lời ngày 6 tháng 11 năm 2014 lúc 23:04Nov 6, 2014 at 23:04

Hướng dẫn how do you make a multidimensional array unique in php? - làm thế nào để bạn tạo một mảng đa chiều duy nhất trong php?

1

Tôi đã đưa ra vấn đề này rất nhiều suy nghĩ và đã xác định rằng giải pháp tối ưu sẽ tuân theo hai quy tắc.

  1. Đối với khả năng mở rộng, sửa đổi mảng tại chỗ; Không sao chép một mảng mới
  2. Đối với hiệu suất, mỗi so sánh chỉ nên được thực hiện một lần

Với ý nghĩ đó và được đưa ra tất cả các kỳ quặc của PHP, dưới đây là giải pháp tôi đưa ra. Không giống như một số câu trả lời khác, nó có khả năng loại bỏ các yếu tố dựa trên bất kỳ khóa nào bạn muốn. Mảng đầu vào dự kiến ​​là các khóa số.

array_unique($array, SORT_REGULAR);
2

Hạn chế duy nhất là các phím không theo thứ tự khi lần lặp hoàn thành. Đây không phải là vấn đề nếu sau đó bạn chỉ sử dụng các vòng lặp foreach, nhưng nếu bạn cần sử dụng một vòng lặp cho vòng lặp, bạn có thể đặt

Array
(
    [0] => Array
        (
            [0] => abc
            [1] => def
        )

    [1] => Array
        (
            [0] => ghi
            [1] => jkl
        )

    [2] => Array
        (
            [0] => mno
            [1] => pql
        )

)
4 sau khi phát triển lại các phím.

Đã trả lời ngày 5 tháng 3 năm 2015 lúc 14:04Mar 5, 2015 at 14:04

RắnSnake

811 Huy hiệu bạc4 Huy hiệu đồng1 silver badge4 bronze badges

1

Hãy thử giải pháp này cho (n) mảng chiều với độ dài không bị giới hạn, ví dụ như mảng này(n) Dimensional array with non-restricted length
for example this array

array_unique($array, SORT_REGULAR);
3

Đây sẽ là giải pháp

array_unique($array, SORT_REGULAR);
4

Đã trả lời ngày 26 tháng 5 lúc 13:44May 26 at 13:44

Hướng dẫn how do you make a multidimensional array unique in php? - làm thế nào để bạn tạo một mảng đa chiều duy nhất trong php?

Dựa trên câu trả lời được đánh dấu là chính xác, thêm câu trả lời của tôi. Mã nhỏ được thêm chỉ để đặt lại các chỉ số-

array_unique($array, SORT_REGULAR);
5

Đã trả lời ngày 14 tháng 2 năm 2020 lúc 11:01Feb 14, 2020 at 11:01

Hướng dẫn how do you make a multidimensional array unique in php? - làm thế nào để bạn tạo một mảng đa chiều duy nhất trong php?

GagangaganGagan

2943 Huy hiệu bạc15 Huy hiệu Đồng3 silver badges15 bronze badges

1

Làm thế nào để bạn có được các giá trị duy nhất trong một mảng đa chiều?

Một chức năng do người dùng xác định có thể giúp nhận được các giá trị duy nhất từ ​​các mảng đa chiều mà không cần xem xét các khóa. Bạn có thể sử dụng chức năng duy nhất của mảng PHP cùng với các hàm mảng khác để nhận các giá trị duy nhất từ ​​một mảng đa chiều trong khi bảo quản các khóa.use the PHP array unique function along with the other array functions to get unique values from a multidimensional array while preserving the keys.

Làm thế nào để bạn làm cho một mảng trở nên độc đáo?

Hoạt động gia tăng tối thiểu để làm cho mảng trở nên độc đáo ..
Làm cho các yếu tố khác biệt trong một mảng được sắp xếp theo mức tăng tối thiểu ..
Tìm tổng các phần tử không lặp lại (khác biệt) trong một mảng ..
Tìm k các phần tử gần nhất với giá trị đã cho trong mảng chưa được phân loại ..
Tìm k các phần tử gần nhất với một giá trị nhất định ..
Tìm kiếm trong một mảng gần như được sắp xếp ..

Làm thế nào tôi có thể nhận được các giá trị duy nhất từ hai mảng trong PHP?

Bạn có thể sử dụng hàm php mảng_unique () và hàm php array_merge () với nhau để hợp nhất hai mảng thành một mảng mà không có giá trị trùng lặp trong PHP.use the PHP array_unique() function and PHP array_merge() function together to merge two arrays into one array without duplicate values in PHP.

Làm thế nào chúng ta có thể nhận được các giá trị trùng lặp trong mảng đa chiều trong PHP?

Để hợp nhất giá trị trùng lặp trong một mảng đa chiều trong PHP, trước tiên, hãy tạo một mảng trống sẽ chứa kết quả cuối cùng. Sau đó, chúng tôi lặp qua từng phần tử trong mảng và kiểm tra tính trùng lặp của nó bằng cách so sánh nó với các yếu tố khác.create an empty array that will contain the final result. Then we iterate through each element in the array and check for its duplicity by comparing it with other elements.