Dre*_*ker 9 php object duplicate-removal multidimensional-array
我有一个对象数组.我想根据对象中的"name"值删除重复项.
[0]=>
object(stdClass)#337 (9) {
["term_id"]=>
string(2) "23"
["name"]=>
string(12) "Assasination"
["slug"]=>
string(12) "assasination"
}
[1]=>
object(stdClass)#44 (9) {
["term_id"]=>
string(2) "14"
["name"]=>
string(16) "Campaign Finance"
["slug"]=>
string(16) "campaign-finance"
}
[2]=>
object(stdClass)#298 (9) {
["term_id"]=>
string(2) "15"
["name"]=>
string(16) "Campaign Finance"
["slug"]=>
string(49) "campaign-finance-good-government-political-reform"
}
Run Code Online (Sandbox Code Playgroud)
因此,在这种情况下,如何从阵列中删除重复的"Campaign Finance"对象.整个[2]对象呢?
我在这里经历了一堆PHP重复数组问题,但似乎没有一个处理对象和过滤一个参数.
ccK*_*Kep 12
使用现有键和名称作为值构建一个新数组,使用array_unique(注意它保留了键).
然后从原始键中删除不在唯一的数组中的所有内容.
编辑:完整示例:
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);
/** Answer Code begins here **/
// Build temporary array for array_unique
$tmp = array();
foreach($array as $k => $v)
$tmp[$k] = $v->name;
// Find duplicates in temporary array
$tmp = array_unique($tmp);
// Remove the duplicates from original array
foreach($array as $k => $v)
{
if (!array_key_exists($k, $tmp))
unset($array[$k]);
}
/** Answer Code ends here **/
echo "After removing duplicates\n";
print_r($array);
Run Code Online (Sandbox Code Playgroud)
输出:
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
)
)
Run Code Online (Sandbox Code Playgroud)
删除了term_id 15的对象,因为它与term_id 14具有相同的名称.
小智 7
单线:
$filtered = array_intersect_key($array, array_unique(array_column($array, 'someProperty')));
Run Code Online (Sandbox Code Playgroud)
请注意,array_column() 适用于 PHP 7 及更新版本中的对象数组。
| 归档时间: |
|
| 查看次数: |
7066 次 |
| 最近记录: |