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



我有一个多维数组,我想删除一个特定索引值重复的数组记录,我必须在丢弃记录之前使用一个条件。

例如,我的数组如下

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]重复,但我想保持行[4]因为它的[4][statusid]小于[0][statusid]。

使用一个简单的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;
    }   
}

这是你可以使用的一行代码:

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

您必须做两件事:首先比较表中的行,并创建一个函数,将一个数组复制到另一个数组(特定行除外)。

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

相关内容

  • 没有找到相关文章

最新更新