【问题标题】:PHPQuery Select all values from dropdownPHPQuery 从下拉列表中选择所有值
【发布时间】:2015-07-20 07:25:12
【问题描述】:

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

但我只得到一个连接所有值的输出。如何将每个值作为数组中的单独元素获取?

【问题讨论】:

  • 你只需要遍历#semester option
  • 您能详细说明一下吗?我在我的代码上做同样的事情
  • 在 jquery 或 javascript 中执行并将其发布到 PHP .. 嗯?
  • 不可能。我正在使用 CURL 在 PHP 中获取 html。
  • PHPQuery 库已经 4 年没有维护了。您可能想要使用更新的替代方案,例如 DOM-Query (github.com/PHPPowertools/DOM-Query)。

标签: php phpquery


【解决方案1】:

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

// 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 &gt; option'] 而不是pq('#semester &gt; option'),这两种变体都可以正常工作。如果您需要省略一些 option - 您将根据 option 属性制作过滤器,例如 if ($opt-&gt;getAttribute('value') != "")

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      这段代码应该可以工作。使用目标作为"#semester option" 而不是"#semester"

      $semesters = $all['#semester option'];
      
      foreach ($semesters as $semester)
      {
        echo pq($semester)->text();
        echo '<br> newline';
      }
      

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

          $sem = array();
          
          foreach (pq('#semester option') as $opt) { 
          
               if(pq($opt) -> val() != '')
               {
                $sem[] = pq($opt) -> text(); 
               }
          }
          
          print_r($sem);
          

          祝你好运.. ['}

          【讨论】:

            【解决方案6】:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2013-12-09
              • 1970-01-01
              • 1970-01-01
              • 2020-04-24
              • 1970-01-01
              • 2019-10-03
              • 1970-01-01
              相关资源
              最近更新 更多