php - 根据条件从数组中删除值

标签 php algorithm

这与其说是 PHP 问题,不如说是算法问题,但我似乎无法弄明白!

我有一个多维数组如下:

[
    210875 => ["2", "1"],
    129096 => ["2", "2"]
]

有 2 个 ID,但可以有更多。根据这些条件,我只想在我的表中保留 1 个 ID。

伪代码:

if a[0] == 1 and a[1] >= 1: # the id gets deleted right away without looking at other conditions
if a[0] >= 2 and a[1] == 2: # it stays if nothing below fits else it gets deleted
if a[0] >= 3 and a[1] == 3: # it stays if nothing below fits else it gets deleted
if a[0] >= 8 and a[1] == 4: # it stays if nothing below fits else it gets deleted
# ... etc

如果两个符合相同条件,则其中一个随机被删除。

例如(伪代码):

a[0] == 2 and a[1] == 1
a[0] == 2 and a[1] == 2

我试过执行以下操作,但我无法弄清楚如何动态地使 if 条件依赖于我的算法:

$sub_array = array();
foreach($array as $k=>$v) {
    if($v[0] == 1 && $v[1] == 1) continue;
    if($v[0] >= 2 && $v[1] == 2) $sub_array[$k] = $v;
    if($v[0] >= 6 && $v[1] == 3) $sub_array[$k] = $v;
    if($v[0] >= 8 && $v[1] == 4) $sub_array[$k] = $v;
    // etc ...
}

此外,当我这样做时,如何知道子数组中最高的是哪一个?

最佳答案

我不完全清楚你的条件是什么,但对我来说,你似乎真的在给你的每一行排名,最后你想保留排名最高的行。

即使我对您的规则的解释可能不完全符合您的预期,您也可以通过调整下面代码中的分数来调整它。我还建议交换条件,以便 == 比较先出现。这样会更有效率:

$keepKey = null;
$bestScore = -1;
foreach($array as $k=>$v) {
    $score = 0;
    if ($v[1] == 1 && $v[0] == 1) $score = 1;
    if ($v[1] == 2 && $v[0] >= 2) $score = 2;
    if ($v[1] == 3 && $v[0] >= 6) $score = 3;
    if ($v[1] == 4 && $v[0] >= 8) $score = 4;
    // ... etc ...
    if ($score > $bestScore) {
        $keepKey = $k;
        $bestScore = $score;
    }
}

$sub_array = [$keepKey => $array[$keepKey]]; // Only keep the entry with highest score

如果在平局的情况下真的随机选择一个很重要,那么在开始循环之前洗牌:

$keepKey = null;
$bestScore = -1;

$keys = array_keys($array); // <---
shuffle($keys);             // <
foreach($keys as $k) {      // <
    $v = $array[$k];        // <---
    $score = 0;
    if ($v[1] == 1 && $v[0] == 1) $score = 1;
    if ($v[1] == 2 && $v[0] >= 2) $score = 2;
    if ($v[1] == 3 && $v[0] >= 6) $score = 3;
    if ($v[1] == 4 && $v[0] >= 8) $score = 4;
    echo $score . "\n";       
    if ($score > $bestScore) {
        $keepKey = $k;
        $bestScore = $score;
    }
}

$sub_array = [$keepKey => $array[$keepKey]];

关于php - 根据条件从数组中删除值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53559860/

相关文章:

algorithm - 钱币收藏家的问题

php - Laravel 身份验证问题

php - 安全风险? $_REQUEST 变量 ... $$ 在本地堆栈上

python - 如何合并两个链表

java - 背包变化算法

algorithm - 试图解决 ACM 295(胖子)。寻找算法

c++ - 为 tic-tac-toe 实现 minimax 算法

javascript - 如何在php中的数组中间不爆炸逗号

php - 将 MYSQL 结果导出到 CSV

php - 使用 PHP 将 HTML 数据提交到 Google App Engine MySQL 数据库