分享

PHP-比较字符串部分与数组值

 印度阿三17 2019-11-19

我有一个字符串在PHP中形成HTML选择框.我也有一个数组.我想要的是:我想将选择框的选项与数组元素进行比较,而只将与数组元素匹配的选项保留在选择框中.
以下是使概念更清晰的代码.

字符串形成选择框为:

 $str = '<select name="options[45]" id="select_45" class=" required-entry product-custom-option" title=""  onchange="opConfig.reloadPrice()">
<option value="" >-- Please Select --</option>
<option value="76"  price="0" >Certified Networking </option>
<option value="89"  price="0" >Certified Virtualization </option>
<option value="90"  price="0" >Certified Expert Virtualization </option><option value="91"  price="0" >Certified  Mobility </option>
<option value="92"  price="0" >Certified Professional Networking </option><option value="93"  price="0" >Certified Professional Virtualization </option>
</select>';

数组是:

$array = array('-- Please Select --','Certified Networking', 'Certified Mobility');

经过比较,我想要字符串为:

$str = '<select name="options[45]" id="select_45" class=" required-entry product-custom-option" title=""  onchange="opConfig.reloadPrice()">
<option value="" >-- Please Select --</option>
<option value="76"  price="0" >Certified Networking </option>
<option value="91"  price="0" >Certified  Mobility </option>
</select>';

我尝试使用DOM,这使我可以从字符串中获取选项文本.但是我一直坚持下去,找不到进一步的方法.

$dom = new DOMDocument();
$dom->loadHTML($str);
$xpath = new DOMXPath($dom);

$options = $xpath->query('//select/option'); 

foreach ($options as $option) {
    echo $option->nodeValue;
}

解决方法:

您可以使用正则表达式的功能,如下所示.但请记住,它仅适用于您的类型,这意味着仅当您具有select和options标记时才有效.

$str = '<select name="options[45]" id="select_45" class=" required-entry product-custom-option" title=""  onchange="opConfig.reloadPrice()">
<option value="" >-- Please Select --</option>
<option value="76"  price="0" >Certified Networking </option>
<option value="89"  price="0" >Certified Virtualization </option>
<option value="90"  price="0" >Certified Expert Virtualization </option><option value="91"  price="0" >Certified  Mobility </option>
<option value="92"  price="0" >Certified Professional Networking </option><option value="93"  price="0" >Certified Professional Virtualization </option>
</select>';

$array = array('-- Please Select --','Certified Networking', 'Certified Mobility');

foreach ($array as $index=>$value) {
    $array[$index] = preg_replace(array('/([\-\ \*\$\^\{\}\[\]\<\>\.\?\\/\\\\])/', '/\s /'), array('\\\\$1', '\\\\s '), $value);
}
$str = explode("\n", str_replace('</option><option', "</option>\n<option", $str));
$regexp = '/^(?:\s*(?:\<\/?select[^\>]*\>[^\n]*|\<option[^\>]*\>\s*(?:'.implode('|', $array).')\s*\<[^\n]*)\s*)$/i';
foreach($str as $index=>$value) {
    if (!preg_match($regexp, $value, $match)) {
        unset($str[$index]);
    }
}
$str = implode("\n",$str);

编辑
如果您有任何包含选择选项大小写的html,请使用下面编辑的html:

$str = '<select name="options[45]" id="select_45" class=" required-entry product-custom-option" title=""  onchange="opConfig.reloadPrice()">
<option value="" >-- Please Select --</option>
<option value="76"  price="0" >Certified Networking </option>
<option value="89"  price="0" >Certified Virtualization </option>
<option value="90"  price="0" >Certified Expert Virtualization </option><option value="91"  price="0" >Certified  Mobility </option>
<option value="92"  price="0" >Certified Professional Networking </option><option value="93"  price="0" >Certified Professional Virtualization </option>
</select>';

$array = array('-- Please Select --', 'Certified Networking', 'Certified Mobility');

foreach ($array as $index => $value) {
    $array[$index] = preg_replace(
        array('/([\-\ \*\$\^\{\}\[\]\<\>\.\?\\/\\\\])/', '/\s /'),
        array('\\\\$1', '\\\\s '),
        $value
    );
}
$str = explode("\n", str_replace('</option><option', "</option>\n<option", $str));
$regexp = '/^(?:\s*(?:\<option[^\>]*\>\s*(?:' . implode('|', $array) . ')\s*\<[^\n]*)\s*)$/i';
foreach ($str as $index => $value) {
    if (stripos($value, '<option') !== false && !preg_match($regexp, $value, $match)) {
        unset($str[$index]);
    }
}
$str = implode("\n", $str);
来源:https://www./content-1-565901.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多