如何删除此阵列的重复项。 我需要具体说明哪些产品名称不必重复。 它只是" Test1"不必重复。 Test2可能会重复。
感谢。
Array
(
[0] => Array
(
[Status] => OK
[Productname] => test1
)
[1] => Array
(
[Status] => OK
[Productname] => test1
)
[2] => Array
(
[Status] => OK
[Productname] => test2
)
[3] => Array
(
[Status] => OK
[Productname] => test2
)
)
修改
- 我输出 -
删除状态和产品名称
Array ( [0] => Array ( [OK] => 1 [test1] => 1 )
[1] => Array ( [OK] => 1 [test2] => 1 )
[2] => Array ( [OK] => 1 [test2] => 1 ) )
答案 0 :(得分:2)
我认为这可以满足您的需求:
$a = array(
array('Status' => 'OK', 'Productname' => 'test1'),
array('Status' => 'OK', 'Productname' => 'test1'),
array('Status' => 'OK', 'Productname' => 'test2'),
array('Status' => 'OK', 'Productname' => 'test2')
);
$uniq_name = 'test1';
$key = 'Productname';
$b = array();
$uniq = array();
array_walk($a, function($a) use (&$b,$key,$uniq_name,&$uniq) {
$name = $a[$key];
if ($name !== $uniq_name || !$b[$name]++) $uniq[] = $a;
});
print_r($uniq);
array_walk
一次通过输入数组一个元素。数组$b
用于保存计数输出数组Productname
中具有相同$uniq
的条目数。如果$uniq
不是那个元素应该是唯一的,或者如果没有添加具有相同名称的元素,则元素只会添加到Productname
。
修改强>: 虽然上述方法有效,但它有点hacky。您可能会认为使用以下内容更清楚地表达您的意思会更清晰:
array_walk($a, function($a) use (&$b,$key,$uniq_name,&$uniq) {
$name = $a[$key];
if ($name !== $uniq_name || !isset($b[$name])) $uniq[] = $a;
$b[$name] = 1;
});
与其依赖于如果未设置$b[$name]
,评估为false
,您可以使用isset()
。
输出:
Array ( [0] => Array ( [Status] => OK [Productname] => test1 )
[1] => Array ( [Status] => OK [Productname] => test2 )
[2] => Array ( [Status] => OK [Productname] => test2 ) )
答案 1 :(得分:0)
这是你在找什么:
<?php
$arr = array(
array('status'=>'OK','Productname'=>'test1'),
array('status'=>'OK','Productname'=>'test1'),
array('status'=>'OK','Productname'=>'test2'),
array('status'=>'OK','Productname'=>'test2')
);
print_r(array_unique($arr, SORT_REGULAR));
和here是你帮助的小提琴。
以上的输出是:
Array
(
[0] => Array
(
[status] => OK
[Productname] => test1
)
[2] => Array
(
[status] => OK
[Productname] => test2
)
)