Сделать уникальный массив из другого 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 ответа
Ну, вы можете объединить массивы и извлечь уникальные значения:
$merged = array_merge($array1, $array2, $array3);
$unique = array_unique($merged);
куда $array1
, $array2
а также $array3
являются результатами preg_match_all
функции.
Я собираюсь опубликовать ответ, но у меня очень мало уверенности, что он даст вам то, что вы ищете. Я пытался создать метод, отражающий ваши намерения, но я мог быть совершенно неправ.
Входные данные:
$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',
),
)