我有一个多维数组,其中可能发生两行是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.可以手动设置日期。有时可能会给用户一个自动日期,但也有一个手动日期。在这种情况下,我们在数组中有一个用户的双重条目,唯一的区别是天数。我如何处理所有这些是非常复杂的,所以更容易删除之后具有较高天数的行而不是避免在开头使用它们。
但是我必须在不知道其中任何一个的情况下找到这些双重值。我也不知道双值会出现在哪个索引处。我需要遍历数组,比较两行用户名'列具有相同的值。如果他们有,那就必须看看那一行的“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);
}
}
因此,当我合并$ manual和$ user时,可能会发生同一个用户在两个数组中,因为他们有curr = 1 AND manual = 1。 例如,我只需添加&#34; AND manual = 0&#34;对于第一个MySQL语句,我得到了一个&#34;数组大小不一致&#34;问题,因此我只想删除天数较高的行。 这些名字是独一无二的。
答案 0 :(得分:0)
假设您的数组结构相当一致,您可以循环遍历数组,比较相似值并记录目前为止具有最高比较值的索引。这个问题有点宽泛,因为您没有提供有关代码的大量信息。如果您想要更简洁的答案,那么您需要更好地解释您的问题,提供更多代码示例以及您尝试过的事情。
http://repl.it/nUQ - 一个非常粗略的例子。我会留给您将其推断为您可以在您的环境中应用的内容。
$multi = Array(
Array(
'name' => 'bob',
'age' => '42',
'id' => 412),
Array(
'name' => 'bob',
'age' => 42,
'id' => 624),
Array(
'name' => 'jim',
'age' => 35,
'id' => 800)
);
function remove_highest($arr, $iden, $comp) {
$highest = 0;
$row = -1;
foreach ($arr as $key=>$value) {
if (isset($value[$iden[0]]) &&
$value[$iden[0]] === $iden[1] ) {
if ($value[$comp] > $highest) {
$highest = $value[$comp];
$row = $key;
}
}
}
if ($row > -1) {
array_splice($arr, $row, 1);
}
return $arr;
}
$current = remove_highest($multi, ['name', 'bob'], 'id');