如何在数组中找到类似 [number] 的模式?
我有一个类似的数组:
$array = array('1', '2', '3', '{1}', '{2}', '{3}', '[1]', '[2]', '[3]');
如何过滤数组并只保留那些具有特定模式的字符串,如 [数字] ?
答案 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;
}
}