2016-11-05 109 views
-1

如果您创建一个数组并使用函数preg_match_all填充值,那么如何从数组中检索每个单独的值(基本上是从索引0到整个长度的扫描)?我想获取每个值并在其上执行另一个函数,那么如何返回存储在数组中的每个值? (我想改编的索引为0值,在索引1等)从PHP中的数组中检索值

$contents = file_get_contents('words.txt'); 
$arr = array(); 
preg_match_all($pattern, $contents, $arr); //finds all matches 
$curr = current($arr); 

我试着这样做(我的模式是在别的地方写的),后来呼应,但我不断收到字符串“阵列”。

+0

我想拿起,除尘,并回答这个问题。你能否提供(作为你的问题的一个编辑)一个最小的,相关的'$ contents'可以包含的样本?你能解释一下你想要捕捉哪些部分吗?有了这些新信息,我可以尝试为您提供解决方案。更新问题后请ping我。 – mickmackusa

回答

-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 
} 
+0

感谢您在foreach循环中的提示,但是我仍然在回显时发现$ curr是“Array”。它应该是返回“阵列”? – li127

-1

preg_match_all()至少需要参数:(1)正则表达式。 (2)匹配你的正则表达式的字符串。它还需要第三个可选参数,它会自动填充所有找到的匹配项。这第三个参数是一个数字索引数组。因此,您可以像循环阵列一样循环,并像对待任何正常阵列(,它是)那样对待它。下面的代码片段演示这个使用代码:

<?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... 
-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' ] 
] 

具体的例子可以在找到。你只需要选择哪一个更适合你需要做的选择。因此,要应用您的功能,您只需执行foreach循环或使用array_map(这也是一个隐藏循环,但更短更慢)。因此,要应用您的功能,您只需执行foreach循环或使用array_map即可。

一般来说,如果您不确定变量的结构是什么,您可以使用print_rvar_dump来了解它的外观。