Hướng dẫn how do you make an array of objects unique in php? - làm thế nào để bạn tạo một mảng đối tượng duy nhất trong php?

99

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Có phương pháp nào như Array_unique cho các đối tượng không? Tôi có một loạt các mảng với các đối tượng 'vai trò' mà tôi hợp nhất, và sau đó tôi muốn lấy ra các bản sao :]

Benmorel

32,8K48 Huy hiệu vàng173 Huy hiệu bạc305 Huy hiệu đồng48 gold badges173 silver badges305 bronze badges

hỏi ngày 11 tháng 3 năm 2010 lúc 16:06Mar 11, 2010 at 16:06

2

class Role {
    private $name;

    //.....

    public function __toString[] {
        return $this->name;
    }

}
0 hoạt động với một loạt các đối tượng bằng cách sử dụng
class Role {
    private $name;

    //.....

    public function __toString[] {
        return $this->name;
    }

}
1:
works with an array of objects using
class Role {
    private $name;

    //.....

    public function __toString[] {
        return $this->name;
    }

}
1
:

class MyClass {
    public $prop;
}

$foo = new MyClass[];
$foo->prop = 'test1';

$bar = $foo;

$bam = new MyClass[];
$bam->prop = 'test2';

$test = array[$foo, $bar, $bam];

print_r[array_unique[$test, SORT_REGULAR]];

Sẽ in:

Array [
    [0] => MyClass Object
        [
            [prop] => test1
        ]

    [2] => MyClass Object
        [
            [prop] => test2
        ]
]

Xem nó trong hành động tại đây: //3v4l.org/vonh#v529

Cảnh báo: Nó sẽ sử dụng so sánh "==", không so sánh nghiêm ngặt ["==="].: it will use the "==" comparison, not the strict comparison ["==="].

Vì vậy, nếu bạn muốn xóa các bản sao bên trong một mảng các đối tượng, hãy cẩn thận rằng nó sẽ so sánh từng thuộc tính đối tượng, không so sánh nhận dạng đối tượng [ví dụ].

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

Matthieu Napolimatthieu NapoliMatthieu Napoli

46.6K44 Huy hiệu vàng164 Huy hiệu bạc256 Huy hiệu Đồng44 gold badges164 silver badges256 bronze badges

5

Vâng,

class Role {
    private $name;

    //.....

    public function __toString[] {
        return $this->name;
    }

}
2 so sánh giá trị chuỗi của các phần tử:

Lưu ý: Hai phần tử được coi là bằng nhau khi và chỉ khi

class Role {
    private $name;

    //.....

    public function __toString[] {
        return $this->name;
    }

}
3 tức là khi biểu diễn chuỗi giống nhau, phần tử đầu tiên sẽ được sử dụng.: Two elements are considered equal if and only if
class Role {
    private $name;

    //.....

    public function __toString[] {
        return $this->name;
    }

}
3 i.e. when the string representation is the same, the first element will be used.

Vì vậy, hãy đảm bảo thực hiện phương thức

class Role {
    private $name;

    //.....

    public function __toString[] {
        return $this->name;
    }

}
4 trong lớp của bạn và nó xuất ra cùng một giá trị cho các vai trò bằng nhau, ví dụ:

class Role {
    private $name;

    //.....

    public function __toString[] {
        return $this->name;
    }

}

Điều này sẽ coi hai vai trò là bình đẳng nếu chúng có cùng tên.

Shakaran

10.3k2 Huy hiệu vàng28 Huy hiệu bạc46 Huy hiệu đồng2 gold badges28 silver badges46 bronze badges

Đã trả lời ngày 11 tháng 3 năm 2010 lúc 16:09Mar 11, 2010 at 16:09

Felix Klingfelix KlingFelix Kling

772K172 Huy hiệu vàng1069 Huy hiệu bạc1116 Huy hiệu đồng172 gold badges1069 silver badges1116 bronze badges

3

Câu trả lời này sử dụng

class Role {
    private $name;

    //.....

    public function __toString[] {
        return $this->name;
    }

}
5 vì bản chất của việc so sánh các đối tượng trong Php 5 cho phép chúng ta làm như vậy. Việc sử dụng hành vi so sánh đối tượng này yêu cầu mảng chỉ chứa các đối tượng, nhưng điều đó dường như là trường hợp ở đây.

$merged = array_merge[$arr, $arr2];
$final  = array[];

foreach [$merged as $current] {
    if [ ! in_array[$current, $final]] {
        $final[] = $current;
    }
}

var_dump[$final];

Đã trả lời ngày 22 tháng 12 năm 2010 lúc 9:57Dec 22, 2010 at 9:57

Salathesaleditsalathe

50.5k11 Huy hiệu vàng103 Huy hiệu bạc130 Huy hiệu đồng11 gold badges103 silver badges130 bronze badges

4

Đây là một cách để loại bỏ các đối tượng trùng lặp trong một mảng:

Bài Viết Liên Quan

Chủ Đề