如何在PHP中的多维数组中删除某个条件后的重复记录

时间:2016-09-23 05:11:21

标签: php arrays multidimensional-array

我有一个多维数组,我希望在复制特定索引值时删除数组记录,并且我必须在丢弃记录之前使用条件。

例如我的数组如下

array { 
 [0]
{ ["name"]=> string(12) "A1"   ["status"]=> string(16) "Not Available"   ["statusid"]=>4 ["num"]=> string(7) "33" } 

[1]
{ ["name"]=> string(15) "A2"   ["status"]=> string(16) "Available"  ["statusid"]=>1  ["num"]=> string(7) "39" } 

[2]
{ ["name"]=> string(21) "A3"   ["status"]=> string(16) "Busy" ["statusid"]=>3 ["num"]=> string(7) "55" } 

[3] 
{ ["name"]=> string(12) "A4"   ["status"]=> string(16) "Available"  ["statusid"]=>1 ["num"]=> string(7) "54" } 

[4]
{ ["name"]=> string(18) "A5"   ["status"]=> string(16) "Busy"  ["statusid"]=>3 ["num"]=> string(7) "33" } 
}

在上面的数组中,我想检查" num"上的复制。如果它重复,那么我想删除具有更高" statusid"比如上面的记录" num"重复在[0] [num]和[4] [num],但我想保持row [4],因为它的[4] [statusid]小于[0] [statusid]。

3 个答案:

答案 0 :(得分:1)

只需使用简单的if即可。您需要将其转移到另一个容器中。只需检查它是否已设置,如果是,只需检查num

$new_array = array();
foreach($array as $a) {
    if(!isset($new_array[$a['num']]) || $a['statusid'] < $new_array[$a['num']]['statusid']) {
        $new_array[$a['num']] = $a;
    }   
}

答案 1 :(得分:0)

这是您可以使用的一个班轮代码:

$input = array_map("unserialize", array_unique(array_map("serialize", $input)));

答案 2 :(得分:0)

你必须做两件事:首先比较表中的行,然后创建一个将一个数组复制到另一个数组的函数来处理特定的行。

$k=0;
for($i=0;$i<$K;$i++)//fix one row
{
for($j=i+1;$j<$k;$j++)//compare with others rows
{
if($array[i]["num"] == $array[j]["num"])
{
if($array[i]["statusid"]< $array[j]["statusid"]
{
$array = copyTable($k,$j,$array);
$k--;//array length will be decremented by 1
}
else
 {
 $array = copyTable($k,$i,$array);
 $k--;//array length will be decremented by 1
 $i--;//fixed row will be delete, so stay in same position
}
}
}
 }

 function copyTable($tableLength,$indexOfRowToRemove,$previousArray)
 {
 $newArray = array();
 for($i=0;$i<$tableLength;$i++)
 {
 if($i!=$indexOfRowToRemove)
  {
    $newArray[$i] =    array( 
                  'name' => $previousArray[$i]["name"],
                  'status' => $previousArray[$i]["status"],
                  'statusid' =>$previousArray[$i]["statusid"], 
                  'num' => $previousArray[$i]["num"],

              )
  }
 }
 return $newArray;
 }