在PHP中从数组值搜索并返回匹配的子字符串

在PHP中从数组值搜索并返回匹配的子字符串,php,arrays,Php,Arrays,我有这样一个数组: 0 => dsadjdasActionsdadas | 123 4Dramdsadsa 1 => dsakjdsa Crime dasdsadas Sci-Fci 2 => dasjhdashkAdventuredsadsasa 我想删减除“Action”、“Dram”、“Crime”、“Sci-Fci”、“Adventure”和“|”之外的所有内容,以将数组的键值更改为类似这样的值。它必须区分大小写 0 => Action | Dram 1 =&g

我有这样一个数组:

0 => dsadjdasActionsdadas | 123 4Dramdsadsa
1 => dsakjdsa Crime dasdsadas Sci-Fci
2 => dasjhdashkAdventuredsadsasa
我想删减除“Action”、“Dram”、“Crime”、“Sci-Fci”、“Adventure”和“|”之外的所有内容,以将数组的键值更改为类似这样的值。它必须区分大小写

0 => Action | Dram
1 => Crime | Sci-Fci
2 => Adventure
我希望这对你有帮助

$array = array("dsadjdasActionsdadas | 123 4Dramdsadsa", "dsakjdsa Crime | dasdsadas Sci-Fci", "dasjhdashkAdventuredsadsasa");
print_r($array);
$clean_array = array_map('cleanGenre', $array);
print_r($clean_array);

function cleanGenre($text)
{
    $genres = array('Action', 'Adventure', 'Crime', 'Dram', 'Sci-Fci');
    $parts = explode("|", $text);
    $result = array();
    foreach($parts as $part)
        foreach($genres as $genre)
            if (preg_match("/". $genre. "/i", $part))
                $result[] = $genre;
    return (implode(' | ', $result));
}
结果将是:

Array
(
    [0] => dsadjdasActionsdadas | 123 4Dramdsadsa
    [1] => dsakjdsa Crime | dasdsadas Sci-Fci
    [2] => dasjhdashkAdventuredsadsasa
)
Array
(
    [0] => Action | Dram
    [1] => Crime | Sci-Fci
    [2] => Adventure
)
注意,我在$array[1]中插入了一个“|”符号


这是我的第一篇帖子

具有
preg\u match\u all
array\u map
内爆功能的简单解决方案:

$arr = [
    0 => 'dsadjdasActionsdadas | 123 4Dramdsadsa',
    1 => 'dsakjdsa Crime dasdsadas |Sci-Fci',
    2 => 'dasjhdashkAdventuredsadsasa'
];

$result = array_map(function($v){
    preg_match_all("/(Action|Dram|Crime|Sci-Fci|Adventure|\|)+?/", $v, $matches);
    return implode(' ',$matches[0]);
}, $arr);


var_dump($result);
// the output:
array (size=3)
  0 => string 'Action | Dram' (length=13)
  1 => string 'Crime | Sci-Fci' (length=15)
  2 => string 'Adventure' (length=9)

你到底想达到什么目的。到目前为止,简单的字符串函数(例如与strpos()结合使用的
substr()
)就可以了。如果它变得更复杂,你可能需要一个正则表达式——但要更精确地说明你想要什么。