Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP多维数组中删除特定条件后的重复记录_Php_Arrays_Multidimensional Array - Fatal编程技术网

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

如何在PHP多维数组中删除特定条件后的重复记录,php,arrays,multidimensional-array,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" ["statu

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

例如,我的数组如下所示

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]

这是一个可以使用的线性代码:


$input=array\u map(“非序列化”,array\u唯一(array\u map(“序列化”),$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;
 }
$k=0;
对于($i=0;$i$previousArray[$i][“statusid”],
“num”=>$previousArray[$i][“num”],
)
}
}
返回$newArray;
}

如果
,只需使用一个简单的
。您需要将其转移到另一个容器中。只需检查其是否已设置,如果已设置,只需检查
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;
    }   
}
$new_array=array();
foreach($a数组){
如果(!isset($new_array[$a['num']])| |$a['statusid']<$new_array[$a['num']]['statusid'])){
$new_数组[$a['num']]=$a;
}   
}

可能重复。那么,到目前为止,您尝试了什么?谢谢您的帮助,但我不想让它熄灭。我想要的是检查num的重复,如果找到,则删除statusid值较高的数组。像在我的数组中一样,[1]、[2]、[3]、[4]将保留在数组中,但[0]将删除,因为它与[4][num]具有相同的[0][num],但[0][statusid]的值高于[4][statusid],因此它应该从数组中删除。希望您现在能理解。@FQ的索引混乱,编辑应该可以正常工作。感谢您的工作,但是如何使用索引值保存数组,如[0]、[1]、[2]、[3]等。它正在保存状态id@FQ只需使用
array\u values
重新索引数组
$new\u array=array\u values($$new\u array)