我有一个简单的价格数组,它是用户输入数据的结果
array(4) { [0] => string(4) "18" [1] => string(4) "20" [2] => string(4) "10" [3] => string(4) "17" }
最小值和最大值在前端显示为10-20 $
但是,用户可以在一个字段中输入一系列值,例如:
array(3) { [0]=> string(9) "18-28" [2]=> string(9) "10-15" [3]=> string(9) "16-22" }
然后范围显示为10-15-18-28 $
如果该行具有“-”或“ /”,如何将其分成两行?
感谢帮助:)
答案 0 :(得分:1)
您可以使用explode并将破折号或正斜杠用作分隔符。如果要显示最高和最低,则可以对它们进行排序并使用例如rsort。
$a = [
"18-28",
"18-29",
"10-15",
"16-22"
];
rsort($a);
print_r($a);
结果
Array
(
[0] => 18-29
[1] => 18-28
[2] => 16-22
[3] => 10-15
)
然后,您可以从数组中获得最高的项目,而从最低的范围获得最后的项目。
echo reset($a).'$'; // 18-29$
echo end($a).'$'; // 10-15$
答案 1 :(得分:1)
您可以结合使用explode
和implode
:
$a = [
'18-28',
'10-15',
'16-22'
];
$b = explode('-',implode('-',$a));
echo min($b).'-'.max($b).'$'; // result: 10-28$
如果输入中可能还包含空格或其他虚拟字符,或者人们不习惯地将价格范围输入为“ 18/28”或“ 18〜28”,而不是“ 10-28”之类的值,那将是更简单的方法是:
$a = [
// crappy formatted example input
'18 - 28 ',
'10/15$',
' 16~22'
];
$b = explode(' ',trim(preg_replace('#[^0-9.]+#si',' ',implode(' ',$a))));
echo min($b).'-'.max($b).'$'; // result: 10-28$
这是什么:
$a
的所有元素插入单个字符串中,并用空格粘合在一起min
和max
如果您不想支持浮点数(例如9.95
),请删除正则表达式中的点,即变成'#[^0-9]+#si'
。