我正在寻找一种从变量中删除重复行的方法:
$x = 'one.jpg';
$x .= 'two.jpg';
//remove the following line:
$x .= 'one.jpg';
$x .= 'third.jpg';
输出应为:
$x = 'one.jpgtwo.jpgthird.jpg';
也许一些正则表达式可以解决问题?
编辑:
一些更多的信息
源XML:
BLUE product
main_picture.jpg
blue L
blue.jpg
BLUE XL
blue.jpg
BLUE XXL
blue.jpg
为此,我需要两个唯一的jpg:
> main_picture.jpg
> blue.jpg
模块的有趣部分是处理源XML:
foreach($xml->SHOPITEM as $product){
if(isset($product->IMGURL)){$xml_content .= ''.htmlspecialchars($product->IMGURL).''."\n";}
foreach($product->variant as $option){
if(isset($option->IMGURL)){$xml_content .= ''.htmlspecialchars($option->IMGURL).''."\n";}
}
}
解决方法:
此示例代码将您的XML减少到所需的结果:
$dom = new DOMDocument();
$dom->formatOutput = True;
libxml_use_internal_errors( 1 );
$dom->loadXML( $x, LIBXML_NOBLANKS );
$xpath = new DOMXPath( $dom );
$nodes = $xpath->query( '//SHOP/SHOPITEM/PRODUCT_VARIANT/IMGURL' );
$found = array();
foreach( $nodes as $key => $node )
{
if( in_array( $node->nodeValue, $found ) )
{ $node->nodeValue = ''; }
else
{ $found[] = $node->nodeValue; }
}
$result = $dom->saveXML();
基本上,只需使用数组即可检索唯一值,然后在检索所有< IMGURL>之后通过xpath的节点,使用foreach循环检查每个节点:如果它们存在于数组中,则将节点值设置为空字符串,否则将当前节点值添加到数组中.
上面的脚本仅分析< IMGURL>具有< PRODUCT_VARIANT>作为父节点;如果要分析所有< IMGURL>节点,只需在以下位置更改xpath行:
$nodes = $xpath->query( '*//IMGURL' );
标签:php,regex
来源: https://codeday.me/bug/20191118/2032132.html