【问题标题】:How do I filter this in array?如何在数组中过滤它?
【发布时间】:2011-01-27 11:03:31
【问题描述】:

我确实有这样的标签

search100
web250
seo36
analytics5060
traffic8000
web2.0

我想从这个标签中删除数字,这样我就可以在 php 中使用这个代码

preg_replace("/\d+$/gm", "", input)

但我想保持web2.0 完好无损...当我使用循环时如何过滤它..我确实有超过 100k 的这样的标签。

【问题讨论】:

  • 您能否提供更多您不想删除的标签示例?目前尚不清楚是什么让web2.0 如此特别。是两个数字之间的. 吗?是不是在非数字字符前有数字?

标签: php arrays loops


【解决方案1】:

您可以使用模式/(\w)\d+$/m$1 作为替代:

preg_replace('/(\w)\d+$/m', '$1', $input)

此模式要求数字序列前至少有一个单词字符。

要对数组的每个元素应用此替换,请使用array_map

array_map(function($elem) { return preg_replace('/(\w)\d+$/m', '$1', $elem); }, $arr);

如果您不能像我的示例那样使用 anonymous function(自 PHP 5.3 起可用),您可以定义一个单独的函数,改用 create_function 或只使用 foreach

【讨论】:

    【解决方案2】:

    从您模糊的描述和小样本来看,您似乎可以使用:

    $input = preg_replace("/\d\d+$/m", "", $input);
    

    这将省去 2.0 后缀,因为它会查找两个连续的数字作为最小值。但是实现它的另一种方法是消极的向后看(?<!2\.)\d+$

    【讨论】:

      猜你喜欢
      • 2018-02-05
      • 2011-01-06
      • 1970-01-01
      • 2021-03-17
      • 2020-08-09
      • 2021-08-09
      • 1970-01-01
      • 2017-04-12
      • 2017-11-24
      相关资源
      最近更新 更多