取二维数组的某一项的最大值或者最小值

1
2
3
4
5
6
7
8
9
10
11
12
public function getMaxOrMin($data,$field,$type='max'){
if(!is_array($data) || !$field){
return false;
}

$temp = array();
foreach($data as $key=>$value){
$temp[] = $value[$field];
}

return $type=='max'?max($temp):mix($temp);
}

取二维数组的某一项的最大项或者最小项,包括键命和键值

1
2
3
4
5
6
7
8
9
public function getMaxOrMin($data,$field,$type='max'){
if(!is_array($data) || !$field){
return false;
}

$temp = array_column($data, $field);
$temp_key = $type=='max'?array_search(max($temp), $temp):array_search(min($temp), $temp);
return $data[$temp_key];
}

根据某字段取 第一个比自己大的,包括键名和键值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//自己的上级,上级的上级,上级的上级,上级的上级 对应的等级
//根据自己的等级 查找 自己的上级这条线上 等级比自己高的
$agentlevel = 2;
$arr = [
[
'agentlevel'=>3,
'levelname'=>'总代'
],
[
'agentlevel'=>2,
'levelname'=>'董事'
],
[
'agentlevel'=>4,
'levelname'=>'天使'
]
];
function getAgentInfo($agentlevel,&$arr){
foreach($arr as $key=>$val) {
if ($val['agentlevel'] <= $agentlevel) {
unset($arr[$key]);
continue;
}
}
return $arr;
}
var_dump(getAgentInfo($agentlevel,$arr));

根据某字段取 第一个比自己大的,包括键名和键值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
//根据自己所拥有的金额和,判断自己改升级到哪个等级
function getAgentLevel($monery, $agents,$key='monery'){
$l = count($agents);
$data = [];

for ($pos = 0; $pos < $l; $pos++) {
if ($monery < $agents[$pos][$key]) {

} else {
if ($monery >= $data[$key]) {
$data = $agents[$pos];
} else {

}
}
}
return $data;
}
$arr_test = [
[
'id'=>1,
'level'=>'员工',
'monery'=>'100'
],
[
'id'=>2,
'level'=>'主管',
'monery'=>'300'
],
[
'id'=>3,
'level'=>'总监',
'monery'=>'1000'
],
[
'id'=>4,
'level'=>'副总',
'monery'=>'3000'
]
];
var_dump(getAgentLevel(1500,$arr_test));
//自己1500分的时候应该属于 总监级别
array(3) {
["id"]=>
int(3)
["level"]=>
string(6) "总监"
["monery"]=>
string(4) "1000"
}

根据指定日期或数字,取更接近于上面还是下面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
function getBeforeOrAfter($Number, $NumberRangeArray,$keys='monery'){
$w = 0;
$c = -1;
$abstand = 0;
$l = count($NumberRangeArray);

for($pos=0; $pos < $l; $pos++){
$n = $NumberRangeArray[$pos][$keys];
$abstand = ($n < $Number) ? $Number - $n : $n - $Number;
if ($c == -1){
$c = $abstand;
continue;
}else if ($abstand < $c){
$c = $abstand;
$w = $pos;
}
}

//10-20更新
//因为我们项目是计算时间,时间只能向前查找,所以需要根据当前的数字再次判断,若接近时间大于当前时间,需要获取前一位的时间

if ($Number < $NumberRangeArray[$w][$keys]) {
// return $NumberRangeArray[$w+1];
return $NumberRangeArray[$w];
// if(!$w){
// return $NumberRangeArray[$w];
// }else{
// return $NumberRangeArray[$w-1];
// }
}
return $NumberRangeArray[$w];
}

$arr_test = [
[
'id'=>1,
'level'=>'员工',
'monery'=>100
],
[
'id'=>2,
'level'=>'主管',
'monery'=>300
],
[
'id'=>3,
'level'=>'总监',
'monery'=>1000
],
[
'id'=>4,
'level'=>'副总',
'monery'=>3000
]
];

var_dump(getBeforeOrAfter(1100,$arr_test));

array(3) {
["id"]=>
int(3)
["level"]=>
string(6) "总监"
["monery"]=>
int(1000)
}