如何在PHP

时间:2015-11-03 02:45:12

标签: php loops

我正在尝试刮掉一些字符串(下面示例中的颜色),但只能设法刮掉第一个字符串(蓝色):

<?php

   function extract_unit($string, $start, $end)
   {
      $pos = stripos($string, $start);

      $str = substr($string, $pos);

      $str_two = substr($str, strlen($start));

      $second_pos = stripos($str_two, $end);

      $str_three = substr($str_two, 0, $second_pos);

      $unit = trim($str_three); // remove whitespaces

      return $unit;
    }   


// example to extract the colors 

$text = '<p>this is the color blue</p><p>this is the color yellow</p><p>this is the color red</p>';
$unit = extract_unit($text, 'color', '</p>');

// Outputs: blue, but I need yellow and red as well!
echo $unit;
?>

以上作品但仅输出:蓝色,但我也需要黄色和红色!

 foreach( $unit as $item )
{
    echo $item.'<br />';
}

这没用,有什么想法吗?谢谢!

3 个答案:

答案 0 :(得分:1)

根据我的理解,您希望浏览一些HTML并抓取<p>代码中的每个项目,然后在color之后获取特定字词。

这是针对这种情况的,但很容易改变。

$text = '<p>this is the color blue</p><p>this is the color yellow</p><p>this is the color red</p>';
$unit = explode("<p>",$text); //Use PHP explode function
foreach($unit as $item){
  if($item != ""){ //If it's not empty
    $item = explode("color",$item); //explode() creates array
    $item = end($item); //Grab last element of array
    $item = trim($item); //Trim whitespace
    $item = strip_tags($item); //Remove the p tags
    echo $item."<br>"; //Echo out the color
  }
}

有关PHP爆炸的更多信息:http://php.net/manual/en/function.explode.php

答案 1 :(得分:0)

要使用foreach方法,您需要拥有一个数组。在php中声明数组的方法是:

$array = array("blue", "green", "yellow");

所以你的函数必须返回一个数组,而不是一个简单的变量。

提示:var_dump($array)函数在php中有很多帮助进行调试。

答案 2 :(得分:0)

这个答案基于你的逻辑。

function extract_unit($haystack, $keyword1, $keyword2){
    $return = array();
    $a=0;
    while($a = strpos($haystack, $keyword1, $a)){   // loop until $a is FALSE
        $a+=strlen($keyword1);                    // set offset to after $keyword1 word
        if($b = strpos($haystack, $keyword2, $a)){  // if found $keyword2 position's
            $return[] = trim(substr($haystack, $a, $b-$a)); // put result to $return array
        }
    }
    return $return;
}

$text = '<p>this is the color blue</p><p>this is the color yellow</p><p>this is the color red</p>';
$unit = extract_unit($text, 'color', '</p>');
print_r($unit);