将数组值匹配到字符串

时间:2016-05-05 17:35:53

标签: php

我有一个数组和一个字符串。我想将字符串与数组值的任何部分匹配,并将匹配值添加到$newAr

$mood = array('orange', 'blue', 'green', 'red', 'pink', 'brown', 'black');
$str = "re";
$newAr = array();

如何将所有具有$str值的数组值放入新数组$newAr

我期待:

$newAr[] = array('green')
$newAr[] = array('red')

我尝试了if (stripos($mood, $str) !== false) { },但没有按照我的预期行事。

2 个答案:

答案 0 :(得分:2)

这是一个简单的方法:

$newAr = preg_grep("/$str/", $mood);

如果您希望它不区分大小写,例如REreRerE,请使用i修饰符"/$str/i"

要显示多维数组,使用array_map()

会很容易
$newAr = array_map(function($v) { return (array)$v; }, $newAr);

或者从您的评论到match

$newAr = array_map(function($v) { return array('match'=>$v); }, $newAr);

要获得您期望的JSON格式,您需要重新索引数组:

echo json_encode(array_values($newAr));

所以要把它们放在一起:

$newAr = array_values(array_map(function($v) {
                                   return array('match'=>$v);
                                },
                                preg_grep("/$str/i", $mood)));

毕竟,这会更简单:

foreach($mood as $value) {
    if(stripos($value, $str) !== false) {
        $newAr[] = array('match'=>$value);
    }
}

答案 1 :(得分:0)

试试这个简单的脚本:

$mood = array('orange', 'blue', 'green', 'red', 'pink', 'brown', 'black');
$str = "re";
$matches = array_filter($mood, function($var) use ($str) { return preg_match("/$str/i", $var); });

print_r($matches);

结果:

Array ( [2] => green [3] => red )