如何在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)代码>