Сделать уникальный массив из другого 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',
  ),
)
Другие вопросы по тегам