在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()
)就可以了。如果它变得更复杂,你可能需要一个正则表达式——但要更精确地说明你想要什么。