使用不同的preg_match_all将唯一数组应用于字符串数组

时间:2017-05-09 15:34:30

标签: php arrays regex preg-match-all

我有一个逻辑问题,我不知道如何解决,我对此感到很困惑。

我有一个以这种方式组成的数组:

titoli[
    1 => 'NFL'
    2 => 'Johnny Depp'
    3 => 'Institute of Technology'
    4 => 'Another text'
]

现在,我需要对该数组应用不同的正则表达式,我该怎么做并拥有一个最终数组呢?

现在我写了这个:

for($i=0;$i<sizeof($titoli);$i++)
{
    if(str_word_count($titoli[$i]) > preg_match_all('/([A-Z][a-zA-Z0-9-]*)([\s][A-Z][a-zA-Z0-9-]*)+/', $titoli[$i]))
{
    preg_match('/([A-Z][a-zA-Z0-9-]*)([\s][A-Z][a-zA-Z0-9-]*)+/', $titoli[$i], $result[$i]);
    $i++;
}
if(str_word_count($my_array[$i]) > preg_match_all('/^[A-Z][a-z]* [a-z]+ [A-Z][a-z]*$/', $titoli[$x]) && preg_match_all('/^[A-Z][a-z]* [a-z]+ [A-Z][a-z]*$/', $titoli[$i]) > 0) //controlla che nel titolo non siano state messe tutte le parole con l'iniziale maiuscola
{
    preg_match('/^[A-Z][a-z]* [a-z]+ [A-Z][a-z]*$/', $titoli[$x], $result_b[$y], PREG_PATTERN_ORDER);
    $y++;
}
}

2 个答案:

答案 0 :(得分:0)

好吧,您可以合并数组,然后提取唯一值:

$merged = array_merge($array1, $array2, $array3);

$unique = array_unique($merged);

$array1$array2$array3preg_match_all函数的结果。

答案 1 :(得分:0)

我将发布一个答案,但我很少有信心它会给你你想要的东西。我试图构建一个反映你意图的方法 - 但我可能是错误的。

输入:

$titoli=[
    1 => 'NFL',
    2 => 'Johnny Depp',
    3 => 'Institute of Technology',
    4 => 'Another text'
];

方法:

foreach($titoli as $t){
    if($t==strtoupper($t)){  // every letter is uppercase
        $result['acronyms'][]=$t;
    }elseif($t==ucwords(strtolower($t))){  // every word starts with an uppercase letter
        $result['names'][]=$t;
    }else{  // has at least one word begins with a lowercase letter
        $result['other'][]=$t;
    }
}
var_export($result);

输出:

array (
  'acronyms' => 
  array (
    0 => 'NFL',
  ),
  'names' => 
  array (
    0 => 'Johnny Depp',
  ),
  'other' => 
  array (
    0 => 'Institute of Technology',
    1 => 'Another text',
  ),
)