Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自数组php的匹配模式_Php_Arrays_Pattern Matching_Match - Fatal编程技术网

来自数组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'));