对于php >=7.0
:
自从 PHP 7.0 以来,array_column
可以用于对象数组,您可以使用如下组合,如 @plashenkov 所建议的:
$filtered = array_intersect_key($array, array_unique(array_column($array, 'someProperty')));
完整示例:https://3v4l.org/IboLu#v8.0.8
class my_obj
{
public $term_id;
public $name;
public $slug;
public function __construct($i, $n, $s)
{
$this->term_id = $i;
$this->name = $n;
$this->slug = $s;
}
}
$objA = new my_obj(23, 'Assasination', 'assasination');
$objB = new my_obj(14, 'Campaign Finance', 'campaign-finance');
$objC = new my_obj(15, 'Campaign Finance', 'campaign-finance-good-government-political-reform');
$array = array($objA, $objB, $objC);
echo 'Original array:\n';
print_r($array);
$filtered = array_intersect_key($array, array_unique(array_column($array, 'name')));
echo 'After removing duplicates\n';
print_r($filtered);
输出:
Original array:
Array
(
[0] => my_obj Object
(
[term_id] => 23
[name] => Assasination
[slug] => assasination
)
[1] => my_obj Object
(
[term_id] => 14
[name] => Campaign Finance
[slug] => campaign-finance
)
[2] => my_obj Object
(
[term_id] => 15
[name] => Campaign Finance
[slug] => campaign-finance-good-government-political-reform
)
)
After removing duplicates
Array
(
[0] => my_obj Object
(
[term_id] => 23
[name] => Assasination
[slug] => assasination
)
[1] => my_obj Object
(
[term_id] => 14
[name] => Campaign Finance
[slug] => campaign-finance
)
)
由于与术语ID 14具有相同名称,已删除术语ID 15的对象。
对于php <7.0
:
使用现有键构建一个新数组,并将仅名称用作值,使用array_unique
(请注意,它保留键)。 然后将原始数组中的每个键复制到新数组($filtered
)中(或者根据唯一化的数组从原始键中删除所有内容)。
编辑:完整示例:https://3v4l.org/SCrko#v5.6.40
class my_obj
{
public $term_id;
public $name;
public $slug;
public function __construct($i, $n, $s)
{
$this->term_id = $i;
$this->name = $n;
$this->slug = $s;
}
}
$objA = new my_obj(23, 'Assasination', 'assasination');
$objB = new my_obj(14, 'Campaign Finance', 'campaign-finance');
$objC = new my_obj(15, 'Campaign Finance', 'campaign-finance-good-government-political-reform');
$array = array($objA, $objB, $objC);
echo 'Original array:\n';
print_r($array);
$tmp = array();
foreach($array as $k => $v)
$tmp[$k] = $v->name;
$tmp = array_unique($tmp);
$filtered = [];
foreach($array as $k => $v)
{
if (array_key_exists($k, $tmp))
$filtered[$k] = $v;
}
echo 'After removing duplicates\n';
print_r($filtered);
输出:
Original array:
Array
(
[0] => my_obj Object
(
[term_id] => 23
[name] => Assasination
[slug] => assasination
)
[1] => my_obj Object
(
[term_id] => 14
[name] => Campaign Finance
[slug] => campaign-finance
)
[2] => my_obj Object
(
[term_id] => 15
[name] => Campaign Finance
[slug] => campaign-finance-good-government-political-reform
)
)
After removing duplicates
Array
(
[0] => my_obj Object
(
[term_id] => 23
[name] => Assasination
[slug] => assasination
)
[1] => my_obj Object
(
[term_id] => 14
[name] => Campaign Finance
[slug] => campaign-finance
)
)
由于与 term_id 14 相同,具有 term_id 15 的对象已被删除。