【问题标题】:PHP array_search pregPHP array_search preg
【发布时间】:2016-03-18 12:09:21
【问题描述】:

我想搜索“01”。以数组的编号开头。

预期输出:

1 => string '01.02' (length=5)
2 => string '01.03' (length=5)
3 => string '01.04' (length=5)
32 => string '02.02' (length=5)
33 => string '02.03' (length=5)
34 => string '02.04' (length=5)
35 => string '02.05' (length=5)

我的代码:

$key = array_search('/^01./', $tomb_datum);
echo $key;
var_dump($key);

这些预赛无效。

【问题讨论】:

  • 1) array_search 不采用正则表达式作为参数。 2) 你想要所有以01 开头的元素还是只想要第一个?
  • 所有以 01 开头的数组编号。

标签: php arrays regex preg-match


【解决方案1】:

有一个专门用于此目的的函数preg_grep。它将一个正则表达式作为第一个参数,一个数组作为第二个参数。

请看下面的例子:FIDDLE

$haystack = array (
  '01.02',
  '01.03',
  '02.05',
  '02.07'
);

$matches  = preg_grep ('/^01/i', $haystack);

print_r ($matches);

【讨论】:

  • 还有一个数组,我要根据日期旁边的数字进行过滤
【解决方案2】:

如果您要过滤数组,请使用 array_filter:

$resultArray = array_filter($array, function($elm) {
  if (preg_match('/^01/', $elm)) {
    return true;
  } 
  return false;
});

希望这会有所帮助。

【讨论】:

  • 您可以直接返回 preg_match 而不使用 ifs。另外,preg_grep 显然更适合这个...
  • 还有一个数组,我想根据日期旁边的数字进行过滤
  • 如果您避免使用正则表达式,您的方法可能会很有趣:function($elm) { return strpos($elm, '01') === 0; }
【解决方案3】:

您可以使用T-Regx library,它允许使用各种数组过滤器:

pattern('^01.')->forArray($tomb_datum)->filter()

您还可以使用其他方法,例如:

  • filter() - 用于常规(顺序)数组
  • filterAssoc() - 用于关联数组(filterAssoc() 保留键)
  • filterByKeys() - 通过键而不是值过滤数组

PS:注意T-Regx 不需要/.?/ 分隔符!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-02
    • 2011-10-03
    • 1970-01-01
    • 2010-11-24
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    相关资源
    最近更新 更多