如果你创建一个数组并用函数preg_match_all
填充它,你如何从数组中检索每个单独的值(基本上从索引0到长度扫描)?我想获取每个值并对其执行另一个函数,那么如何返回存储在数组中的每个值? (我希望索引0处的arr值,索引1等)
$contents = file_get_contents('words.txt');
$arr = array();
preg_match_all($pattern, $contents, $arr); //finds all matches
$curr = current($arr);
我尝试过这样做(我的模式写在别处)并在之后回复它,但我一直得到字符串"数组"。
答案 0 :(得分:-1)
$contents=file_get_contents('words.txt');
$arr=array();
preg_match_all($pattern,$contents,$arr);//finds all matches
foreach ($arr as $item) {
$curr=current($arr);
// do something
}
答案 1 :(得分:-1)
preg_match_all()
至少需要参数:(1)正则表达式。 (2)匹配你的正则表达式的字符串。它还需要第三个可选参数,它会自动填充所有找到的匹配项。第3个参数是一个数字索引数组。因此,您可以像普通数组一样循环遍历它,并像对待任何普通数组(它)一样对待它。下面的代码片段使用您的代码演示了这一点:
<?php
$contents = file_get_contents('words.txt');
//$arr = array(); //<== NO NEED TO PRE-DECLARE THIS HERE
preg_match_all($pattern, $contents, $arr);//finds all matches
// IF YOU JUST WANT THE 1ST (CURRENT MATCH), SIMPLY USE current:
$curr = current($arr);
// YOU MAY KEEP MOVING THE CURSOR TO THE NEXT ITEM LIKE SO:
$next1 = next($arr);
$next2 = next($arr);
// OR JUST LOOP THROUGH THE FOUND MATCHES: $arr
foreach($arr as $match){
$curr = current($arr); //<== BUT THIS IS SOMEWHAT REDUNDANT WITHIN THIS LOOP.
// THE VARIABLE $match CONTAINS THE MATCHED STRING WITHIN THE CURRENT ITERATION:
var_dump($match); //<== RETURNS THE CURRENT VALUE WITHIN ITERATION
}
// YOU MAY EVEN USE NUMERIC INDEXES TO ACCESS THEM LIKE SO.
$arrLen = count($arr);
$elem0 = isset($arr[0])?$arr[0]:null;
$elem1 = isset($arr[1])?$arr[1]:null;
$elem2 = isset($arr[2])?$arr[2]:null;
$elem3 = isset($arr[3])?$arr[3]:null; //<== AND SO ON...
答案 2 :(得分:-1)
如果我理解你的问题,你想知道结果如何存储在preg_match_all
的第三个参数中。
preg_match_all
将结果存储在第三个参数中作为二维数组。
两种结构是可能的,可以在第四个参数中用两个常量显式设置。
假设你有一个带有两个捕获组的模式,你的主题字符串包含3次出现的模式:
1)PREG_PATTERN_ORDER
是返回类似内容的默认设置:
[
0 => [ 0 => 'whole match 1',
1 => 'whole match 2',
2 => 'whole match 3' ],
1 => [ 0 => 'capture group 1 from match 1',
1 => 'capture group 1 from match 2',
2 => 'capture group 1 from match 3' ],
2 => [ 0 => 'capture group 2 from match 1',
1 => 'capture group 2 from match 2',
2 => 'capture group 2 from match 3' ]
]
2)PREG_SET_ORDER
返回类似的内容:
[
0 => [ 0 => 'whole match 1',
1 => 'capture group 1 from match 1',
2 => 'capture group 2 from match 1' ],
1 => [ 0 => 'whole match 2',
1 => 'capture group 1 from match 2',
2 => 'capture group 2 from match 2' ],
2 => [ 0 => 'whole match 3',
1 => 'capture group 1 from match 3',
2 => 'capture group 2 from match 3' ]
]
具体示例可在PHP manual中找到。您只需要选择哪个是您需要做的更方便的选项。
因此,要应用您的函数,您需要做的就是执行foreach
循环或使用array_map
(这也是隐藏循环,但更短更慢)。
一般情况下,如果您不确定变量的结构是什么,可以使用print_r
或var_dump
来了解它的外观。