如何在这样的数组中找到特定的模式 - > [数]?

时间:2013-07-29 12:43:38

标签: php regex arrays loops foreach

如何在数组中找到类似 [number] 的模式?

我有一个类似的数组:

$array = array('1', '2', '3', '{1}', '{2}', '{3}', '[1]', '[2]', '[3]');

如何过滤数组并只保留那些具有特定模式的字符串,如 [数字]

5 个答案:

答案 0 :(得分:3)

您可以使用array_filter()过滤数组,然后遍历它:

$filtered_array = array_filter( $array, function( $el) { 
    return preg_match( '/^\[\d+\]$/', $el);
});

这是使用preg_match()回调来查找由左方括号[组成的条目,然后是多个数字\d+,然后是右方括号{{1} }。

答案 1 :(得分:3)

您可以尝试is_array()

foreach ($array as $num) {
  if(is_array($num)) {
    echo $num . "<br />";
  }
}

答案 2 :(得分:1)

有几种可能性,其中有两种。

<?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 />";
}

?>

答案 3 :(得分:0)

只需使用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+)?:可选择匹配小数部分
  • \]:匹配]
  • $:字符串结尾

答案 4 :(得分:0)

这样的事可能吗?正则表达式匹配开头[后跟一个数字,后跟结束]

foreach ($array as $num) { 
    if ( preg_match( '#\[\d\]#', $num ) ) {
       echo $num;
    }
}