Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHPQuery Select all values from dropdown

Tags:

php

phpquery

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?

like image 497
Shantanu Paul Avatar asked Jul 20 '15 07:07

Shantanu Paul


People also ask

How do I select all values in a drop-down?

We can extract all the options in a dropdown in Selenium with the help of Select class which has the getOptions() method. This retrieves all the options on a Select tag and returns a list of web elements. This method does not accept any arguments.

How select all jQuery drop-down list?

$('#select_all'). click(function() { $('#countries option'). prop('selected', true); });


2 Answers

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') != "").

like image 108
Sergey Chizhik Avatar answered Oct 03 '22 05:10

Sergey Chizhik


quick trick before you reinvent the wheel, use simple_html_dom, you can find it in http://sourceforge.net/projects/simplehtmldom/ this class has being extremely useful in the past and you can even modify it to either use it with CURL or a string containing HTML code.

You will be able to search for objects (tags) or IDs and get the contents of the tag, or iterate in more friendly way.

like image 43
Yoandro Gonzalez Avatar answered Oct 03 '22 05:10

Yoandro Gonzalez