12

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?

eloibm
  • 899
  • 2
  • 11
  • 27
Shantanu Paul
  • 706
  • 10
  • 26

6 Answers6

4

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.

4

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

Sergey Chizhik
  • 617
  • 11
  • 22
4

This code should work. Use the target as "#semester option" instead of "#semester".

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

foreach ($semesters as $semester)
{
  echo pq($semester)->text();
  echo '<br> newline';
}
Aleksandr M
  • 24,264
  • 12
  • 69
  • 143
Pradeep
  • 106
  • 3
3

Its easy , you need to select the selector with id and iterate it using the tag , create an empty array and store the values in it using a foreach iterator.

$semsterr = array();  //empty Array

//use the option tag for iteration
foreach (pq('select#semester option') as $opt) { 
    $semsterr[] = pq($opt) -> text(); 
 // $semsterr[] = pq($opt) -> attr('value'); in case you need the value
}

print_r($semsterr); // check if the array has the values stored
Clain Dsilva
  • 1,631
  • 3
  • 25
  • 34
3

You must check the value before add in array. Like...

$sem = array();

foreach (pq('#semester option') as $opt) { 

     if(pq($opt) -> val() != '')
     {
      $sem[] = pq($opt) -> text(); 
     }
}

print_r($sem);

Good Luck.. ['}

Nikhil.nj
  • 242
  • 1
  • 11
0

//HTML//

<select name="semester" id="semester" class="inputtxt" onChange="javascript:selectSemester(this, this.form);">
<option value="">-- Select your Semester --</option>
<option value="2nd" >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>

//PHP//

$select = $_POST['semester'];
$count = count($select);
$i = 0;
while($i =< $count)
{
  $i++;
  echo $_POST['semester'][$i]
}
Webdeveloper_Jelle
  • 2,868
  • 4
  • 29
  • 55