我有一個多維數組,其中可能發生兩行幾乎是重複的但不完全。例如:PHP從具有ALMOST重複值的多維數組中刪除特定行
Array (...
[2] => Array ([username] => Akando [grpNo] => 5 [away] => 0 [manudate] => 1428357600 [seit] => 12)
...
[7] => Array ([username] => Akando [grpNo] => 5 [away] => 0 [manudate] => 1428357600 [seit] => 33))
它們只有['seit']值不同。當這樣的事情發生時,我想從數組中移除具有最高['seit']值的行。我怎樣才能做到這一點?
編輯:好的,多一點信息。對不起,我只是覺得這就夠了。此數組包含有關其他用戶正在等待的用戶的信息。他們等待的時間是幾天。自他們等待特定用戶以來的日期可以通過兩種方式給出:1.當某些條件適用時,它將自動設置。 2.日期可以手動設置。有時會發生用戶被賦予自動日期,但也可能發生手動日期。
在這種情況下,我們有一個用戶在數組中的雙重輸入,唯一的區別是日子。我如何解決這一問題非常複雜,因此,將之後的較高日期數刪除會比在開始時避免使用它們更容易。
但是我必須在不知道它們的情況下找到這些雙重值。我也不知道在哪個索引處會出現double值。我需要遍歷數組,比較每行,如果兩個「用戶名」列具有相同的值。如果他們有,它必須看着行的'seit'列來找出哪個行具有更高的'seit'值。然後刪除這一行。
我只是不能包住我的頭如何編碼。
EDIT2:一些更多的代碼:
// Get the users we are waiting for automatically
$result = $db->query("SELECT username, grpNo, away, manudate FROM bb".$n."_counter WHERE curr = '1'");
while($row=$db->fetch_array($result))
{
$user[] = $row;
}
// Sort $user DESC
foreach ($user as $key => $node)
{
$gruppe[$key] = $node['grpNo'];
}
array_multisort($gruppe, SORT_DESC, $user);
$user = array_map("unserialize", array_unique(array_map("serialize", $user)));
// Turn date into days since today
for($i = 0; $i < count($user); $i++)
{
$user[$i]['seit'] = floor((time() - $max[$i]['seit'])/(60 * 60 * 24));
}
// ---------------------------------
// Set dates manually
$result = $db->query("SELECT username, grpNo, away, manudate FROM bb".$n."_counter WHERE manual = '1'");
while($row=$db->fetch_array($result))
{
$manual[] = $row;
}
if(!empty($manual))
{
for($i = 0; $i < count($manual); $i++)
{
$manual[$i]['seit'] = floor((time() - $manual[$i]['manudate'])/(60 * 60 * 24));
}
// merge $manual and $user
if(isset($manual))
{
$user = array_merge_recursive($user, $manual);
}
}
所以,當我合併$手動和$用戶可能會發生相同的用戶是在兩個數組,因爲他們有CURR = 1和手動= 1。 例如,如果我只是在第一個MySQL語句中添加「AND manual = 0」,我會得到一個「數組大小不一致」的問題,因此我只想去掉行數較高的行。 名稱是唯一的。
在循環數組時,存儲以前數組索引的值。現在將它與當前數組索引的當前值進行比較。如果舊數組索引的兩個或三個值與當前匹配,請將其刪除。獲取? –