在PHP中从数组中检索值

时间:2016-11-05 13:49:53

标签: php arrays preg-match-all

如果你创建一个数组并用函数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);

我尝试过这样做(我的模式写在别处)并在之后回复它,但我一直得到字符串"数组"。

3 个答案:

答案 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_rvar_dump来了解它的外观。