后缀与第一个数组匹配的第二个数组的显示元素

时间:2013-05-17 04:24:18

标签: php arrays string filtering

我有两个数组,即:

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

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

我想打印后缀与第一个数组匹配的第二个数组的内容。即输出应为lovelybeautiful

我如何在PHP中执行此操作?

4 个答案:

答案 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
)
*/

See Demo

答案 2 :(得分:1)

尝试使用array_filter()进行有效的回调。在您的情况下,我建议您查看regular expressionspreg_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);

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