【问题标题】:PHP How to match exact numbers and symbols in a string using preg_match?PHP如何使用preg_match匹配字符串中的精确数字和符号?
【发布时间】:2018-10-26 07:24:32
【问题描述】:

我正在为我的网站解析一些数据并将其标准化。 我解析得到的数据:

[sizes] => Array
    (
        [0] => 5
        [1] => 6
        [2] => 10
        [3] => 6+
        [4] => 7
        [5] => 7+
        [6] => 8
        [7] => 8+
        [8] => 9
    )

我需要得到:

[0] => US - 5
[1] => US - 6
[2] => US - 10
[3] => US - 6.5
[4] => US - 7.5
[5] => US - 8.5

我尝试了 preg_replace(各种不同的变体)和 str_replace,但似乎没有任何效果。它似乎覆盖了值:

 $sizes[$i]= str_replace("7", "US - 7", $sizes[$i]); 
 $sizes[$i] = preg_replace('/\b6\b/', "US - 6", $sizes[$i]); 
 $sizes[$i] = preg_replace('~6\+$~m', "US - 6.5", $sizes[$i]); 
 $sizes[$i] = preg_replace('~5+$~m', "US - 5.5", $sizes[$i]);

我得到类似的东西:

        [0] => US - 10
        [1] => US - 5.US - 5
        [2] => US - 6
        [3] => US - 6.US - 5.US - 5
        [4] => US - 7
        [5] => US - 8
        [6] => US - 9
        [7] => US - US - 7.5
        [8] => US - US - 8.5

如果有人可以提供帮助,我将不胜感激。 谢谢

【问题讨论】:

  • 您的数据是一个看起来像print_r 输出的长字符串,还是一个字符串数组?
  • 这是一个字符串数组
  • 保存 6 而不是 7,8 和 9 的逻辑是什么?
  • 那么数组是什么?将其添加到问题中,以便我们可以重现。
  • 这只是部分示例。数组中的所有数字都需要它。

标签: php preg-replace str-replace


【解决方案1】:

与其尝试使用正则表达式并假设常量 'US - x' 和 + 表示 .5 大小,然后以 US - 为前缀,只需将 + 替换为 .5 并使用array_walk() 处理每个元素...

$size = [0 => "5",
    1 => "6",
    2 => "10",
    3 => "6+",
    4 => "7",
    5 => "7+",
    6 => "8",
    7 => "8+",
    8 => "9"];

array_walk($size, function (&$data) { 
                $data = "US - ".str_replace("+", ".5", $data); 
});
print_r($size);

输出...

Array
(
    [0] => US - 5
    [1] => US - 6
    [2] => US - 10
    [3] => US - 6.5
    [4] => US - 7
    [5] => US - 7.5
    [6] => US - 8
    [7] => US - 8.5
    [8] => US - 9
)

您当然可以使用任何类型的循环,而不仅仅是array_walk(),主要逻辑是相同的。

【讨论】:

  • 太完美了!谢谢!
【解决方案2】:

这是另一种方法:

<?php

$result = [];
$size = [
    0 => "5",
    1 => "6",
    2 => "10",
    3 => "6+",
    4 => "7",
    5 => "7+",
    6 => "8",
    7 => "8+",
    8 => "9"
];

foreach($size as $key => $value) {
    $result[$key] = "US - " . number_format(floatval($value), 2);
}

echo "<pre>";
print_r($result);
echo "</pre>";

输出:

Array
(
    [0] => US - 5.00
    [1] => US - 6.00
    [2] => US - 10.00
    [3] => US - 6.00
    [4] => US - 7.00
    [5] => US - 7.00
    [6] => US - 8.00
    [7] => US - 8.00
    [8] => US - 9.00
)

【讨论】:

    猜你喜欢
    • 2017-10-28
    • 1970-01-01
    • 2021-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多