YaBCK
YaBCK

Reputation: 3029

Get certain strings only (PHP)

Text:

TestString
HT-Child1 CLASS-Class1
AnotherString
HT-Child2 CLASS-Class2
HT-Child3 CLASS-Class3
HT-Child4 CLASS-Class4
CLASSOFWEEK-Class

What I have so far: (Inside $display->getExtraHTML() is the text). Could someone guide me towards what I need to do to adapt my code to get the results I want.

<?php 
    $additionalHTML = explode("\n", $display->getExtraHTML());
    $html = "";
    $html .= "<ul>";
        foreach($additionalHTML as $key => $item){
            $html .= "<li>$item</li>";
        }
    $html .= "</ul>";
    echo $html;
?>

I know I can use something like this to get string between, but how do I use it to get all the values i need?

$string = strstr($display->getExtraHTML(), "HT-"); // gets all text from HT
$string = strstr($string, "CLASS-", true); // gets all text before CLASS

Can I use both explode and strstr to get to where I want?

Expect HTML markup:

Expected Result: (Get the values from HT- and CLASS-)

<ul>
   <li>Child1 Class1</li>
   <li>Child2 Class2</li>
   <li>Child3 Class3</li>
   <li>Child4 Class4</li>
</ul>

Upvotes: 0

Views: 57

Answers (3)

Linards Kalvans
Linards Kalvans

Reputation: 489

You may use regex, to find the matching lines and extract required data:

if(preg_match("/HT-([A-Za-z0-9]+) CLASS-([A-Za-z0-9]+)/", $item, $output))
{
    $html .= "<li>".implode(" ",array_slice($output,1))."</li>";
}

Upvotes: 0

RomanPerekhrest
RomanPerekhrest

Reputation: 92854

Complete solution with preg_match_all function:

$txt = '
TestString
HT-Child1 CLASS-Class1
AnotherString
HT-Child2 CLASS-Class2
HT-Child3 CLASS-Class3
HT-Child4 CLASS-Class4
CLASSOFWEEK-Class';

preg_match_all('/^HT-(\S+)\s+CLASS-(\S+)/m', $txt, $m);
$html = "<ul>";
if (isset($m[1]) && isset($m[2])){
    foreach(array_map(null, $m[1], $m[2]) as $pair){
        $html .= "<li>". implode(' ', $pair) ."</li>";
    }
}

$html .= "</ul>";
echo $html;

The output (push Run code snippet):

<ul><li>Child1 Class1</li><li>Child2 Class2</li><li>Child3 Class3</li><li>Child4 Class4</li></ul>

Upvotes: 1

Jeffrey Hitosis
Jeffrey Hitosis

Reputation: 325

Here's the solution

 <?php
$str = "TestString
HT-Child1 CLASS-Class1
AnotherString
HT-Child2 CLASS-Class2
HT-Child3 CLASS-Class3
HT-Child4 CLASS-Class4
CLASSOFWEEK-Class";



    $additionalHTML = explode("\n", $str);
    $html = "";
    $html .= "<ul>";
        foreach($additionalHTML as $key => $item){
          if(substr($item,0,3) == "HT-") {
            $i = explode(" ",$item);
            $a = substr($i[0],3);
            $b = substr($i[1],6);
            $html .= "<li>$a"." ". "$b</li>";
          }
        }
    $html .= "</ul>";
    echo $html;

Result

Child1 Class1
Child2 Class2
Child3 Class3
Child4 Class4

Upvotes: 1

Related Questions