查找具有特定字符串的选项的值

时间:2014-04-14 13:12:48

标签: php forms simple-html-dom

从选择表单中考虑以下代码段:

    <select name="cat_id"">
        <option  value="33">Apple</option>
        <option  value="44">Banana</option>
        <option  value="48">Carrot</option>
        <option  value="50">Dew</option>
        <option  value="77">Eggplant</option>
        <option  value="84">Fern</option>
        <option  value="92">Grass</option>
    </select>

有没有办法,使用SIMPLE DOM,我可以提取值=&#34; x&#34;特定字符串。

示例,我想获得 Dew 的值,因此,我必须能够 50 尝试搜索和播放,但找不到确切的答案:

Parsing drop down menu with php simple dom&lt; - 但值不是从0开始,也不是均匀递增

php , simple_html_dom.php, get selected option&lt; - 我甚至没有在选择表单中选择条目

我需要获取特定字符串的值,以便我可以使用它来使用cURL发送表单。

希望,有人可以提供帮助。提前谢谢,更有力量。

1 个答案:

答案 0 :(得分:1)

以下代码将解析所有option个节点,当搜索到的文本匹配时,它将显示相应的值并结束:

$input =  <<<_DATA_
    <select name="cat_id">
        <option  value="33">Apple</option>
        <option  value="44">Banana</option>
        <option  value="48">Carrot</option>
        <option  value="50">Dew</option>
        <option  value="77">Eggplant</option>
        <option  value="84">Fern</option>
        <option  value="92">Grass</option>
    </select>
_DATA_;

// Create a DOM object
$html = new simple_html_dom();
// Load HTML from a string
$html->load($input);

// searched text
$searchText = 'dew';

// Create a regex pattern (match $searchText followed OR preceded by any number of spaces/tabs/newLines ...)
// i flag stands for case insensitive match
$pattern = '/\s*'.$searchText.'\s*/i';


foreach( $html->find('select[name="cat_id"] option') as $option ){
    echo $string = $option->plaintext;

    // Check if the current node contains the searched text
    if( preg_match($pattern, $string) ){
        $value = $option->value;

        echo ' => ' . $value;

        // Exit the loop when done
        break;
    }

    echo '<br>';
}

<强>输出

Apple
Banana
Carrot
Dew => 50