0

我有一个来自文本:

$text = 'abc def abc ghi abc jkl';
$search = 'abc';
$regex = '/'.trim($search).'/ism';
if(preg_match_all($regex, $text, $tmp)) {
   $array_key = $tmp[0];
   foreach($array_key as $ak) {
       echo $ak[1];
   }
}

当我 echo $ak[1] is result is b时,我想要结果是abc,如何解决它

abc def abc ghi abc jkl

4

4 回答 4

1

echo $ak;的循环内部呢?

$ak[1]是匹配中的第二个字符,因此产生b

于 2012-04-17T10:18:29.533 回答
1

好吧,$tmp将在您的正则表达式中包含所有字段的数组。然后这些数组将包含这些字段的所有值。

你的代码有效地做的是$ak = $tmp[0][$x] = "abc",当你把你带到$ak[1]比数组实际拥有的更远一层时,得到"abc"[1] = "b"

我想你想echo $ak;改为。

于 2012-04-17T10:19:22.283 回答
0
if(preg_match_all($regex, $text, $tmp)) {
   $array_key = $tmp[0];
   echo $array_key[1];
}
于 2012-04-17T10:31:21.250 回答
0
I am trying to discuss within your code. I hope its will help

<?php
$text = 'abc def abc ghi abc jkl';
$search = 'abc';
$regex = '/'.trim($search).'/ism';
if(preg_match_all($regex, $text, $tmp)) 
{
  $array_key = $tmp[0];

  /*Test using print_r($tmp); 
    then you will find result: Array( [0] => Array ( [0] => abc [1] => abc [2] =>      
     abc) ) 
   If you want to test/print first array value then echo $array_key[0]; result is: abc
   Similarly for $array_key[1] or $array_key[2] result is abc
   That means your array contains 3 same value
   */

   foreach($array_key as $ak) 
   {
    /*If you use echo $ak[1]; then it will print b because in foreach loop $ak value   
    is:  abc 
    You can't print only abc in foreach loop. To print abc you don't need to use   
    foreach loop. Just use echo $array_key[0]; 
   */ 
   }
  }
  ?>

  Maybe your expected code is:
  <?php
    $text = 'abc def abc ghi abc jkl';
    $search = 'abc';
    $regex = '/'.trim($search).'/ism';
    if(preg_match_all($regex, $text, $tmp)) 
    {
     $array_key = $tmp[0];
     echo $array_key[0];
    }
   ?>
  Output: abc
于 2012-04-17T11:18:49.170 回答