在PHP中从数组中检索最高值

时间:2016-08-16 17:17:32

标签: php arrays sorting unique

我会发布整个代码,但这是长篇大论和令人困惑的,所以我会保持简短。这对我来说很复杂,所以任何帮助都将非常感谢!

这些是我的数组中的值:

Light Blue1
Blue2
Blue1
Black3
Black2
Black1

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

类似于我正在寻找的东西是 array_unique ,但这在这里不起作用。所以沿着这些线可以检索具有最高编号的每种颜色。

谢谢!

2 个答案:

答案 0 :(得分:0)

假设您的格式始终为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];
    }
}

答案 1 :(得分:0)

使用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
)