【问题标题】:How to compare string match in a array?如何比较数组中的字符串匹配?
【发布时间】:2014-06-16 03:50:11
【问题描述】:
$array = ('Home', 'Design', 'Store');
$str = 'home';
if (in_array($str, $array)) {
   die("Match");
} else {
   die("No Match");
}

结果为“No Match”=>如何将其修复为结果为“Match”?

【问题讨论】:

  • in_array 区分大小写,所以 'home' != 'Home' us1.php.net//manual/en/function.in-array.php
  • 只是想在这里做个通知。不要忘记类型比较 - 例如 in_array(0, array('Home', 'Design')) 将返回 true 而 in_array(0, array('Home', 'Design'), true) 不会

标签: php arrays string


【解决方案1】:

如上所述,Mike K in_array() 区分大小写,因此您可以将每个数组元素的大小写更改为小写(例如):

function in_array_case_insensitive($needle, $array) {
     return in_array( strtolower($needle), array_map('strtolower', $array) );
}

Demo

【解决方案2】:

尝试使用preg_grep,如手册所述:

返回匹配模式的数组条目

您的代码已重新编写以使用它:

$array = array('Home', 'Design', 'Store');
$str = 'home';
if (preg_grep( "/" . $str . "/i" , $array)) {
   die("Match");
} else {
   die("No Match");
}

或者,如果某种正则表达式看起来有点多,您可以使用 array_map 和 strtolower 来标准化您的数据以进行 in_array 检查,如下所示:

$array = array('Home', 'Design', 'Store');
$str = 'home';
if (in_array(strtolower($str), array_map('strtolower', $array))) {
   die("Match");
} else {
   die("No Match");
}

补充:我在 cmets 中声称 preg_match 会比 array_map 快,but doing some tests online with my code 表明这里根本不是这种情况。因此,请使用您感觉更好的任何功能。速度似乎有利于array_map。

  • preg_grep:2.9802322387695E-5 秒
  • array_map:1.3828277587891E-5 秒

【讨论】:

  • -1 用于在内置函数正常工作时使用正则表达式。
  • @scrowler 是的,您可以使用array_map,这也是我喜欢的功能。但我最近了解到array_map 在很多情况下实际上比正则表达式要慢。
  • 我并不是要严厉@JakeGould,但我相信最佳实践建议不要这样做。更多信息:programmers.stackexchange.com/a/113243
猜你喜欢
  • 2012-10-12
  • 2022-03-30
  • 1970-01-01
  • 2013-05-23
  • 2020-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多