删除数组中的重复项(不是全部)

时间:2014-04-30 08:40:18

标签: php arrays duplicates

如何删除此阵列的重复项。 我需要具体说明哪些产品名称不必重复。 它只是" 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 ) )

2 个答案:

答案 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);

working example

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;
});

working example

与其依赖于如果未设置$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
        )

)