如何在数组中找到类似[number]的模式?
我有一个类似的数组:
$array = array('1', '2', '3', '{1}', '{2}', '{3}', '[1]', '[2]', '[3]');
如何过滤数组并仅保存具有特定模式的字符串,例如[a number]?
您可以使用 过滤数组array_filter()
,然后遍历它:
$filtered_array = array_filter( $array, function( $el) {
return preg_match( '/^\[\d+\]$/', $el);
});
这是使用回调preg_match()
来查找由左方括号[
,然后是数字\d+
,然后是右方括号组成的条目]
。
你可以试试is_array()
:
foreach ($array as $num) {
if(is_array($num)) {
echo $num . "<br />";
}
}
有几种可能,这里有两种。
<?php
$array = array(1, 2, 3, "{1}", "{2}", "{3}", "[1]", "[2]", "[3]");
// Method 1
foreach ($array as $num)
{
if(preg_match("/\[\d+\]/", $num)){
echo $num . "<br />";
}
}
echo "<hr/>"
// Method 2
$filtered=preg_grep("/\[\d+\]/", $array);
foreach ($filtered as $num)
{
echo $num . "<br />";
}
?>
只需使用preg_grep:
$array = array(1, 2, 3, '{1}', '{2}', '{3}', '[1]', '[2]', '[3]');
$new_array = preg_grep('#^\[\d+(?:.\d+)?\]$#', $array);
$new_array = array_values($new_array); // re-index the array
print_r($new_array); // print the results
解释正则表达式:
^
: 字符串开头\[
: 匹配[
\d+
: 匹配 1 位或更多位(?:.\d+)?
: 可选匹配小数部分\]
: 匹配]
$
: 字符串结束可能是这样的?正则表达式匹配开头[
,后跟一个数字,然后是结尾]
。
foreach ($array as $num) {
if ( preg_match( '#\[\d\]#', $num ) ) {
echo $num;
}
}