我会发布整个代码,但这是长篇大论和令人困惑的,所以我会保持简短。这对我来说很复杂,所以任何帮助都将非常感谢!
这些是我的数组中的值:
Light Blue1
Blue2
Blue1
Black3
Black2
Black1
我需要从Array中检索的值是“Light Blue1”,“Blue2”和“Black3”。这些是每种颜色的“最高值”。
类似于我正在寻找的东西是 array_unique ,但这在这里不起作用。所以沿着这些线可以检索具有最高编号的每种颜色。
谢谢!
答案 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_split
和max
函数的解决方案:
$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
)