PHPQuery Select 下拉列表中的所有值

PHPQuery Select all values from dropdown

我需要使用 PHPQuery 根据下拉列表的 id 获取数组中下拉列表的所有值。

以下是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>

我试过这个:

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

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

但我只得到一个输出,所有值都串联在一起。如何将每个值作为数组中的单独元素获取?

重复发明轮子之前的小技巧,使用simple_html_dom,你可以在http://sourceforge.net/projects/simplehtmldom/中找到它这个class在过去非常有用,你甚至可以修改它来将它与 CURL 或包含 HTML 代码的字符串一起使用。

您将能够搜索对象(标签)或 ID 并获取标签的内容,或者以更友好的方式进行迭代。

很简单,您需要 select selector with id 并使用标签对其进行迭代,创建一个空数组并使用 foreach 迭代器将值存储在其中。

$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

您必须在添加数组之前检查该值。 喜欢...

$sem = array();

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

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

print_r($sem);

祝你好运..['}

这段代码对我来说很好用:

// 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

所以结果是

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

顺便说一句,您可以使用 $doc['#semester > option'] 而不是 pq('#semester > option'),两种变体都可以正常工作。如果你需要省略一些 option - 你会根据 option 属性制作过滤器,比如 if ($opt->getAttribute('value') != "").

此代码应该有效。使用目标 "#semester option" 而不是 "#semester".

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

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

//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]
}