phpphpquery

PHPQuery Select all values from dropdown


I need to get all the values of a dropdown in an array based upon the id of the dropdown using PHPQuery.

The following is the HTML:

<select name="semester" id="semester" class="inputtxt" onChange="javascript:selectSemester(this, this.form);">
    <option value="">-- Select your Semester --</option>
    <option value="2nd" selected>2nd</option>
    <option value="4th" >4th</option>
    <option value="6th" >6th</option>
    <option value="8th" >8th</option>
    <option value="SE1" >SE1</option>
    <option value="SE3" >SE3</option>
    <option value="SE5" >SE5</option>
    <option value="SE7" >SE7</option>
</select>

I tried this:

$semesters = $all['#semester'];

foreach ($semesters as $semester) {
    echo pq($semester)->text();
    echo '<br>';
}

But I get only a single output with all the values concatenated. How do I get each value as separate element in an array?


Solution

  • This code works fine for me:

    // include part...
    
    $ids = array();
    
    $raw = file_get_contents("http://localhost:8000/test.html"); // your url
    
    $doc = phpQuery::newDocument($raw);
    
    phpQuery::selectDocument($doc);
    
    /** @var DOMElement $opt */
    foreach (pq('#semester > option') as $opt) {
        $ids[] = ($opt->getAttribute('value'));
    }
    
    print_r($ids); // check if the array has the values stored
    

    So result is

    Array
    (
        [0] => 
        [1] => 2nd
        [2] => 4th
        [3] => 6th
        [4] => 8th
        [5] => SE1
        [6] => SE3
        [7] => SE5
        [8] => SE7
    )
    

    BTW, you can use $doc['#semester > option'] instead of pq('#semester > option'), both variants works fine. If you need to omit some option - you'd make filter based on option attributes, like if ($opt->getAttribute('value') != "").