情况比较复杂,请有所准备,
这是过滤器
之前的数组结果 Array
(
[0] => Array
(
[pointText] => 1000pts
[points] => 1000
[redeemMode] => 1
)
[1] => Array
(
[pointText] => 950pts
[points] => 950
[redeemMode] => 1
)
[2] => Array
(
[pointText] => 800pts + Cash RM 200
[points] => 800
[redeemMode] => 2
)
[3] => Array
(
[pointText] => 500pts + Installment RM 100 (5% | 12 Months)
[points] => 500
[redeemMode] => 3
)
)
我需要检查redeemMode是否有超过1个相同的值,我将只显示每个结果中的最低点。在上面的例子中,redeemMode => 1似乎不止一次出现,我不想显示具有相同redeemMode的两个点,我只是想显示最低点。在本例中,我将只显示点数=> 950分。redeemMode => 2和3的其余部分将保持不变。
这是过滤器
之后的数组结果。 Array
(
[0] => Array
(
[pointText] => 950pts
[points] => 950
[redeemMode] => 1
)
[1] => Array
(
[pointText] => 800pts + Cash RM 200
[points] => 800
[redeemMode] => 2
)
[2] => Array
(
[pointText] => 500pts + Installment RM 100 (5% | 12 Months)
[points] => 500
[redeemMode] => 3
)
)
考虑一下。这些项被放入一个由赎回模式键控的数组中。如果该键已经存在,则检查哪个键的点数最低,以决定保留哪个键。
$items = array(
array(
'pointText' => '1000pts',
'points' => '1000',
'redeemMode' => '1'
),
array(
'pointText' => '950pts',
'points' => '950',
'redeemMode' => '1'
),
array(
'pointText' => '800pts + Cash RM 200',
'points' => '800',
'redeemMode' => '2'
),
array(
'pointText' => '500pts + Installment RM 100 (5% | 12 Months)',
'points' => '500',
'redeemMode' => '3'
),
);
$itemsByRedeemMode = array();
foreach ($items as $item) {
if (isset($itemsByRedeemMode[$item['redeemMode']])) {
if ($item['points'] < $itemsByRedeemMode[$item['redeemMode']]['points']) {
$itemsByRedeemMode[$item['redeemMode']] = $item;
}
} else {
$itemsByRedeemMode[$item['redeemMode']] = $item;
}
}
print_r($itemsByRedeemMode);
我的同事试图帮忙,这是他的解决方案
<?php
$array = array(
array
(
'pointText' => '1000pts',
'points' => 1000,
'redeemMode' => 1
),
array
(
'pointText' => '950pts',
'points' => 1050,
'redeemMode' => 1
),
array
(
'pointText' => '800pts + Cash RM 200',
'points' => 800,
'redeemMode' => 2
),
array
(
'pointText' => '500pts + Installment RM 100 (5% | 12 Months)',
'points' => 500,
'redeemMode' => 3
)
);
$result = array();
foreach ($array as $data) {
$isHas = 0;
$mode = $data['redeemMode'];
foreach ($result as $key=> $data1) {
if ($data1['redeemMode'] == $mode) {
if ($data['points'] < $data1['points']) {
unset($result[$key]);
array_push($result,$data);
}
$isHas = 1;
}
}
if ($isHas == 0) {
array_push($result,$data);
}
}
print_r($result);
?>
工作!这是我同事的功劳!
对数组进行了一些简化,使得代码更加紧凑:
$array = array_reduce($array, function (array $result, array $item) {
if (!isset($result[$item['redeemMode']]) || $item['points'] < $result[$item['redeemMode']]['points']) {
$result[$item['redeemMode']] = $item;
}
return $result;
}, []);