来自数组php的匹配模式
我有一个数组,如以下示例:来自数组php的匹配模式,php,arrays,pattern-matching,match,Php,Arrays,Pattern Matching,Match,我有一个数组,如以下示例: Array ( [0] => cinema [1] => school [2] => college [3] => social [4] => cinema [5] => School [6] => COllEGE [7] => Ccccccc ) 我只想要一次以“C”或“S”开头的单词, word中允许重复字符,无论它们是大写还是小写 示例输出: cin
Array
(
[0] => cinema
[1] => school
[2] => college
[3] => social
[4] => cinema
[5] => School
[6] => COllEGE
[7] => Ccccccc
)
我只想要一次以“C”或“S”开头的单词,
word中允许重复字符,无论它们是大写还是小写
示例输出:
cinema
college
ccccccc
php手册和指南可能有以下用途:
<?php
$arr = array ( 'cinema', 'school', 'college', 'social', 'cinema', 'School', 'COllEGE' );
$massaged_array = massage($arr);
$result = array_count_values($massaged_array);
foreach ($result as $key => $value) {
if (substr_compare($key, 'C', 0, 1) || substr_compare($key, 'S', 0, 1)){
echo $key;
}
}
function massage ($arr) {
$result = array();
foreach ($arr as $value) {
$result[] = strtolower($value);
}
return $result;
}
与简单过滤器一起使用(例如regex或$val[0]==“c”
)和
以下是一个示例(未测试):
为什么您选择了学院
而不是学校
作为输出?您的示例输出似乎与您的规格不匹配。”“电影院”和“学院”出现多次。@nickb因为学院包含更多大写字母。好的,忘记大写和小写,尝试不使用它的模式匹配。@NathanielFord这里没有重复意味着输出中没有重复。一个模式一次输出。电影和大学都是从“C”开始的“我只想要从“C”或“S”开始的整句话,只需要一次(不重复)”-那么为什么ccccccccc
匹配呢?得到警告:array\u count\u values()期望参数1是array,null这是因为我忘了从message()返回$result
。更新;抱歉,我并没有实际测试这个问题。这并不能完全解决这个问题,尽管它使阵列的按摩更容易。具体来说,数组过滤器会在结果数组中留下重复项。您应该尝试提供一些示例代码:我认为您会发现有一些实现细节需要解决,但您的思路是正确的。数组过滤器区分大小写数组过滤器不能区分大小写,您的过滤器可以。我加了一个例子。
$data = array(...data...);
function check_value($val) {
return preg_match('/^c/i', $val);
}
$output = array_unique(array_filter($data, 'check_value'));