1

我有两个数组,即:

array('ly', 'ful', 'ay')

array('beautiful', 'lovely', 'power')

我想打印后缀与第一个数组匹配的第二个数组的内容。即输出应该是lovely, beautiful

我怎样才能在 PHP 中做到这一点?

4

4 回答 4

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 ) 
于 2013-05-17T04:40:50.077 回答
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
)
*/

看演示

于 2013-05-17T04:37:10.033 回答
1

尝试使用array_filter()有效的回调。在您的情况下,我建议查看正则表达式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);
?>

相同的输出。

于 2013-05-17T04:46:10.470 回答
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);

您绝对可以优化它并使其更短,但它很容易理解并且是一个很好的起点。

于 2013-05-17T04:42:05.143 回答