我有一个数组和一个字符串。我想将字符串与数组值的任何部分匹配,并将匹配值添加到$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) { }
,但没有按照我的预期行事。
答案 0 :(得分:2)
这是一个简单的方法:
$newAr = preg_grep("/$str/", $mood);
如果您希望它不区分大小写,例如RE
,re
,Re
或rE
,请使用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 )