【问题标题】:PHP : Add lowest value from duplicate records of arrayPHP:从数组的重复记录中添加最小值
【发布时间】:2021-05-06 10:38:49
【问题描述】:

我想删除数组中最高值的重复记录。

数组:

Array
(
    [0] => Array
        (
            [id] => 1
            [number] => 123
            [price] => 6
        )

    [1] => Array
        (
            [id] => 2
            [number] => 456
            [price] => 6
        )
    [2] => Array
        (
            [id] => 3
            [number] => 123
            [price] => 5
        )
)

预期结果:

Array
(
    [0] => Array
        (
            [id] => 2
            [number] => 456
            [price] => 6
        )
    [1] => Array
        (
            [id] => 3
            [number] => 123
            [price] => 5
        )
)

数字是重复字段,之后需要比较价格。哪个会更低,将被显示。其余的都应该删除。

我尝试了什么:

$lowest = min($myArray);

$result = array_filter($myArray, function($value, $key) use ($lowest) {
    return $value === $lowest;
}, ARRAY_FILTER_USE_BOTH);

我该怎么做?


更新:

@Daniel Dez 解决方案几乎可以正常工作。我用了他的第三种解决方案。但是,它应该是这样工作的。

例如:数字 123 是重复记录,现在它的最低价格是 2。那么,它应该显示 123 数字的数组元素的其余部分。

数组:

$data = [
    [
        "id" => 1,
        "number" => 123,
        "price" => 2,
    ],
    [
        "id" => 2,
        "number" => 456,
        "price" => 6,
    ],
    [
        "id" => 3,
        "number" => 123,
        "price" => 5,
    ],
    [
        "id" => 4,
        "number" => 123,
        "price" => 11,
    ],
    [
        "id" => 5,
        "number" => 456,
        "price" => 5,
    ],
    [
        "id" => 6,
        "number" => 123,
        "price" => 5,
    ]
];

预期输出:

Array
(
    [0] => Array
        (
            [id] => 1
            [number] => 123
            [price] => 2
        )

    [1] => Array
        (
            [id] => 2
            [number] => 456
            [price] => 5
        )

)

请帮帮我。

谢谢。

【问题讨论】:

  • 你试过了吗?
  • 是的。让我更新一下。
  • 请检查我的更新问题。
  • $lowest = min($myArray) 在这样的多维数组上毫无意义。
  • 是的。我也觉得。但是,我没有解决方案,这就是我在这里添加问题并需要帮助的原因。

标签: php arrays multidimensional-array


【解决方案1】:

数据:

$numbers = array_unique(array_column($data, 'number'));

usort($data, function ($a, $b) {
    return $a['price'] - $b['price'];
});
$result = [];
foreach ($numbers as $number) {
    foreach ($data as $item) {
        if ($item['number'] == $number) {
            break;
        }
    }

    $result[] = $item;
}

print_r($result);

【讨论】:

  • 您好,感谢您的回答。第三种解决方案几乎可以正常工作。但是,当 id = 1 的价格为 2 并且 id = 3 的价格为 5 时,在这种情况下它不起作用。它应该是显示 2。
  • 你能检查一下并更新那个吗?
  • 我是根据数字属性做的
  • 你可以改成价格
  • 我想你没有明白我的意思。让我更新一下。
猜你喜欢
  • 1970-01-01
  • 2019-09-19
  • 1970-01-01
  • 1970-01-01
  • 2014-04-12
  • 1970-01-01
  • 1970-01-01
  • 2011-05-29
  • 1970-01-01
相关资源
最近更新 更多