我有一个逻辑问题,我不知道如何解决,我对此感到很困惑。
我有一个以这种方式组成的数组:
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++;
}
}
答案 0 :(得分:0)
好吧,您可以合并数组,然后提取唯一值:
$merged = array_merge($array1, $array2, $array3);
$unique = array_unique($merged);
$array1
,$array2
和$array3
是preg_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',
),
)