PHP如何通过条件将数组字符串分成两部分

时间:2019-02-09 14:57:50

标签: php wordpress

我有一个简单的价格数组,它是用户输入数据的结果


    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 $

如果该行具有“-”或“ /”,如何将其分成两行?

感谢帮助:)

2 个答案:

答案 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$

Php demo

答案 1 :(得分:1)

您可以结合使用explodeimplode

$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$

这是什么:

  1. $a的所有元素插入单个字符串中,并用空格粘合在一起
  2. 将字符串的所有非数字部分(不是数字或点的任何部分)替换为一个空格
  3. 修剪字符串以删除开头和结尾的所有多余空格(以避免空元素)
  4. 使用空格作为分隔符来分解字符串,以创建一个包含所有单个数字的新数组
  5. 获取结果数组的minmax

如果您不想支持浮点数(例如9.95),请删除正则表达式中的点,即变成'#[^0-9]+#si'