PHPQuery从下拉列表中选择所有值

时间:2015-07-20 07:25:13

标签: php phpquery

我需要使用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>';
}

但是我只得到一个输出,并且所有值都连接在一起。如何将每个值作为数组中的单独元素?

5 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:4)

此代码适用于我:

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

答案 2 :(得分:4)

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

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

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

答案 3 :(得分:3)

很简单,你需要选择带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

答案 4 :(得分:3)

您必须在添加数组之前检查值。 像...

$sem = array();

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

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

print_r($sem);

祝你好运.. [&#39;}