我有一个多维数组,我希望在复制特定索引值时删除数组记录,并且我必须在丢弃记录之前使用条件。
例如我的数组如下
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]。
答案 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;
}