获取字母数字数组php中的max元素



我希望下面的字母数字数组根据数组中的值返回最大元素,即h5-19:我尝试使用max($array),但返回h5-9

Array
(
[3] => h5-1
[4] => h5-2
[2] => h5-3
[1] => h5-4
[0] => h5-6
[5] => h5-7
[6] => h5-8
[7] => h5-9
[8] => h5-10
[9] => h5-11
[10] => h5-13
[11] => h5-15
[12] => h5-19
)

提前谢谢。

您可以使用基于项的第二位的usort()排序数组。在排序函数中,使用explode()来获取目标数字。

$originArr = [
"h5-01",
"h6-1",
"h5-2",
"h5-3",
"h5-7",
"h5-9",
"h5-11",
"h5-15",
"h5-19" 
];
// Copy array to keep order of origin array
$arr = $originArr;
usort($arr, function($a, $b){
return explode('-', $b)[1] - explode('-', $a)[1];
});
echo $arr[0];
// h5-19

在演示中检查结果

<?php

$set = array();
$data = array(
'3' => 'h5-1',
'4' => 'h5-2',
'2' => 'h5-3',
'1' => 'h5-4',
'0' => 'h5-6',
'5' => 'h5-7',
'6' => 'h5-8',
'7' => 'h5-9',
'8' => 'h5-10',
'9' => 'h5-11',
'10' => 'h5-13',
'11' => 'h5-15',
'12' => 'h5-19',
'789' => 'h1-8',
'123' => 'p-78',
'3000' => 'p-8',
);
foreach($data as $each_element){
$each_val = explode("-",$each_element);
if(!isset($set[$each_val[0]])){
$set[$each_val[0]] = intval($each_val[1]); 
}
$set[$each_val[0]] = max(intval($each_val[1]),$set[$each_val[0]]);
}
print_r($set);

输出:

Array
(
[h5] => 19
[h1] => 8
[p] => 78
)

算法:

  • 创建一组标签,这将是一个关联数组,其中key将是标签名称,value将是数组中该标签的最大值。

  • 如果键已经设置,则获取键(标记(中的值和同样属于同一标记的新值之间的最大值。这样,每个标签都有最大值。

使用rsort()SORT_NATURAL对数据进行排序,然后回声第一项。。。

$data = Array
(
"3" => "h5-1",
"4" => "h5-2",
"2" => "h5-3",
"1" => "h5-4",
"11" => "h5-15",
"12" => "h5-19"
);
rsort($data, SORT_NATURAL);
echo $data[0];

它给出了。。。

h5-19

最新更新