【问题标题】:Retrieve Highest Value from Array in PHP在 PHP 中从数组中检索最大值
【发布时间】:2016-08-16 17:17:31
【问题描述】:

我会发布整个代码,但它冗长且令人困惑,所以我会保持简短和简单。这对我自己来说很复杂,所以任何帮助将不胜感激!

这些是我的数组中的值:

Light Blue1
Blue2
Blue1
Black3
Black2
Black1

我需要从数组中检索的值是“Light Blue1”、“Blue2”和“Black3”。这些是每种颜色的“最高值”。

类似于我正在寻找的东西是 array_unique,但这在这里行不通。因此,沿着这些路线可以检索具有最高数字的每种颜色。

谢谢!

【问题讨论】:

  • LightBlue1、Blue2 和 Black3 是“最高”的标准是什么?

标签: php arrays sorting unique


【解决方案1】:

假设您的格式始终为NameNumber,正则表达式应该可以解决数据分离问题。这将按照您提供的顺序遍历您的数据,并获取第一个不同的元素并将其放入$vals。我还假设您的数据将始终按照您的示例所示排序

$data = ['Light Blue1',
'Blue2',
'Blue1',
'Black3',
'Black2',
'Black1'];

$vals = [];
$current = '';
foreach($data as $row) {
    if(!preg_match('/(.*)(\d)/i', $row, $matched)) continue;
    if($matched[1] != $current) {
        $vals[] = $row;
        $current = $matched[1];
    }
}

【讨论】:

  • 非常感谢!这是完美的!我会投票给你的答案,但我还没有足够的代表。但是再次感谢您!
【解决方案2】:

使用preg_splitmax函数的解决方案:

$colors = ['Light Blue1', 'Blue2', 'Blue1', 'Black3', 'Black2', 'Black1'];
$unique_colors = $result = [];

foreach ($colors as $k => $v) {
    $parts = preg_split("/(\d+)/", $v, 0, PREG_SPLIT_DELIM_CAPTURE);
    $unique_colors[$parts[0]][] = (int) $parts[1];
}
foreach ($unique_colors as $k => $v) {
    $result[] = $k . max($v);
}

print_r($result);

输出:

Array
(
    [0] => Light Blue1
    [1] => Blue2
    [2] => Black3
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-03
    • 1970-01-01
    • 2011-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多