2016-08-16 84 views
0

我会发布整个代码,但它很长并且令人困惑,所以我会保持简短。这对我自己来说很复杂,所以任何帮助都将不胜感激!在PHP中从数组中检索最高值

这些都是从我的数组中的值:

Light Blue1 
Blue2 
Blue1 
Black3 
Black2 
Black1 

我需要从我的数组检索的值是“光蓝天”,“请分享帮助”和“Black3”。这些是每种颜色的“最高值”。

类似于我正在寻找的东西是array_unique,但这不起作用。所以沿着这些线可以检索每个颜色的最高数量的东西。

谢谢!

+1

什么是标准的告诉你LightBlue1,Blue2和Black3是“最高”的? – GentlemanMax

回答

0

假设你的格式总是NameNumber正则表达式应该做分离数据的技巧。这将按照您提供的顺序循环访问数据,并获取不同的第一个元素并将其放入$vals。我也假设你的数据总是被责令为您例如使用preg_splitmax功能显示

$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]; 
    } 
} 
+0

非常感谢!这是完美的!我会举起你的答案,但我没有足够的代表呢。但是再次感谢你! –

0

解决办法:

$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 
)