foreach loop and unexpected else in php when using html dom parser

299 Views Asked by At

I have write a code to use html simple dom parser, here it is :

<?php $opts = array(   'http'=>array( 
   'header'=>"User-Agent:Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X; en-us) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53\r\n"   ) );
    $context = stream_context_create($opts);
    set_time_limit(0);
    include 'simple_html_dom.php';
    $lines = file('BQ.txt');
    foreach ($lines as $line_num => $line){
       $html = file_get_html($line, false, $context);
       if($html && is_object($html) && isset($html->nodes)){
          echo $line; 
       }
       echo "<ul>";
       foreach($html->find("h1[class='productname'],  div[class='productprice']") as $element ){
            if ($element) { } 
            echo "<li>".$element ->plaintext. "</li>";
       } else {
            echo "kosong" 
       }
        echo "</ul>"; 
     }
     $html->clear(); ?>

But it always Parse error: syntax error, unexpected 'else' (T_ELSE) I have tried so many way but still got no solution, the problem is only else{ echo "sorry empty" }

If I run the script without it, it run perfectly

3

There are 3 best solutions below

1
On

You have syntax error in your code. Please compare your code with below:

<?php $opts = array(   'http'=>array( 
   'header'=>"User-Agent:Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X; en-us) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53\r\n"   ) );
    $context = stream_context_create($opts);
    set_time_limit(0);
    include 'simple_html_dom.php';
    $lines = file('BQ.txt');
    foreach ($lines as $line_num => $line){
       $html = file_get_html($line, false, $context);
       if($html && is_object($html) && isset($html->nodes)){
          echo $line; 
       }
       echo "<ul>";
       foreach($html->find("h1[class='productname'],  div[class='productprice']") as $element ){
            if ($element) {
                echo "<li>".$element ->plaintext. "</li>";
            } else {
                echo "kosong" ;
            }
       }
        echo "</ul>"; 
     }
     $html->clear(); ?>
5
On

Sytax error : Else part started after end of second for each and move your echo inside the if condition

          <?php $foreach ($lines as $line_num => $line){
           $html = file_get_html($line, false, $context);
           if($html && is_object($html) && isset($html->nodes)){
              echo $line; 
           }
           echo "<ul>";
           foreach($html->find("h1[class='productname'],  div[class='productprice']") as $element ){
                if ($element) { echo "<li>".$element ->plaintext. "</li>"; } 
                else {
                echo "kosong" 
               }
           } 
            echo "</ul>"; 
         }
    ?>
6
On

Main Problem is here

if ($element) { } 
        echo "<li>".$element ->plaintext. "</li>";
   } else {
        echo "kosong" 
   }
    echo "</ul>"; 
 }
 $html->clear(); ?>

Solution is ...

f ($element) {
        echo "<li>".$element ->plaintext. "</li>";
   } else {
        echo "kosong" ;
   }
    echo "</ul>"; 
 }
 $html->clear();
}?>

It parse fine.