我有两个数组,即:
array('ly', 'ful', 'ay')
和
array('beautiful', 'lovely', 'power')
我想打印后缀与第一个数组匹配的第二个数组的内容。即输出应为lovely
,beautiful
。
我如何在PHP中执行此操作?
答案 0 :(得分:3)
试试这个
$suffix=array('ly','ful','ay');
$words = array('beautiful','lovely','power');
$finalarray=array();
foreach($words as $word)
{
foreach($suffix as $suff)
{
$pattern = '/'.$suff.'$/';
if(preg_match($pattern, $word))
{
$finalarray[]=$word;
}
}
}
print_r($finalarray);
您可以在http://writecodeonline.com/php/
上在线测试<强>输出强>
Array ( [0] => beautiful [1] => lovely )
答案 1 :(得分:1)
假设订单在结果数组中不重要,那么这应该可以为您提供所需的内容:
$arr1 = ['ly', 'ful', 'ay'];
$arr2 = ['beautiful', 'lovely', 'power'];
$result = array_filter($arr2, function($word) use ($arr1){
$word_length = strlen($word);
return array_reduce($arr1, function($result, $suffix) use ($word, $word_length) {
if($word_length > strlen($suffix))
$result = $result || 0 === substr_compare($word, $suffix, -strlen($suffix), $word_length);
return $result;
}, false);
});
print_r($result);
/*
Array
(
[0] => beautiful
[1] => lovely
)
*/
答案 2 :(得分:1)
尝试使用array_filter()
进行有效的回调。在您的情况下,我建议您查看regular expressions(preg_replace()
或preg_match()
)。
<?php
header('Content-Type: text/plain');
$a = array('beautiful','lovely','power');
$b = array('ly','ful','ay');
$filters = array_map(function($filter){ return '/' . $filter . '$/'; }, $b);
$c = array_filter(
$a,
function($element)use($filters){ return $element != preg_replace($filters, '', $element); }
);
var_dump($c);
?>
节目:
array(2) {
[0]=>
string(9) "beautiful"
[1]=>
string(6) "lovely"
}
的 UPDv1:强> 的
使用preg_match()
的更短且优化的版本:
<?php
header('Content-Type: text/plain');
$a = array('beautiful','lovely','power');
$b = array('ly','ful','ay');
$filter = '/^.*(' . implode('|', $b) . ')$/';
$c = array_filter(
$a,
function($element)use($filter){ return preg_match($filter, $element); }
);
var_dump($c);
?>
相同的输出。
答案 3 :(得分:0)
这应该有效:
$suffixes = array('ly','ful','ay');
$words = array('beautiful','lovely','power');
foreach($suffixes as $suffix){
foreach($words as $word){
if(strripos($word, $suffix) == strlen(str_replace($suffix, '', $word))){
$results[] = $word;
}
}
}
print_r($results);
你绝对可以优化它并缩短它,但它很容易理解并且是一个很好的起点。