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 、result is abcが欲しい、修正方法

abc def abc ghi abc jkl

4

4 に答える 4

1

echo $ak;ループ内はどうですか?

$ak[1]は一致の 2 番目の文字であるため、b

于 2012-04-17T10:18:29.533 に答える
1

まあ、$tmp正規表現のすべてのフィールドの配列があります。次に、これらの配列は、それらのフィールドのすべての値で構成されます。

コードが効果的$ak = $tmp[0][$x] = "abc"に行う$ak[1]ことは、取得すると、配列が実際に持っているレベルよりも 1 レベル下に移動して取得すること"abc"[1] = "b"です。

代わりに欲しいと思いますecho $ak;

于 2012-04-17T10:19:22.283 に答える
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 に答える
0
if(preg_match_all($regex, $text, $tmp)) {
   $array_key = $tmp[0];
   echo $array_key[1];
}
于 2012-04-17T10:31:21.250 に答える