我需要一些关于 PHP 的帮助,因为我对它很陌生。
我有这些来自某个位置的字符串集,我需要有条件地从中提取一个字符串子集,只要它存在。
设置:
我得到的每个字符串都有这些Attributes
,每个字符串Attribute
都有一些Values
。所有Attributes
都是可选的,并且都Attributes
可以有可变数量的值。
这些字符串的模式是这样的:
... Attribute Name: Attribute Values Attribute Name: Attribute Values ...
例如,这里有一些示例字符串:
Attribute A: Value 1, Value 2 Attribute B: Value 3, Value 4, Value 5, Value 6 Attribute C: Value 7, Attribute D: Value 8, Value 9
Attribute A: Value 1, Value 2, Value 3 Attribute B: Value 4, Value 5 Attribute C: Value 6, Value 7, Value 8, Attribute E: Value 9, Value 10, Value 11
Attribute B: Value 1, Value 2, Value 3 Attribute C: Value 4 Attribute D: Value 5, Value 6, Value 7, Value 8 Attribute E: Value 9, Value 10
请注意,某些字符串Attributes
缺少一些字符串,并且所有字符串旁边都Attributes
可以列出可变数量的字符串。Values
问题:
我想提取 的所有值Attribute D
,只要存在Values
for Attribute D
。
所以例如..
对于输入此字符串:
Attribute A: Value 1, Value 2 Attribute B: Value 3, Value 4, Value 5, Value 6 Attribute C: Value 7, Attribute D: Value 8, Value 9
我应该得到这个输出:Value 8, Value 9
对于输入此字符串:
Attribute A: Value 1, Value 2, Value 3 Attribute B: Value 4, Value 5 Attribute C: Value 6, Value 7, Value 8, Attribute E: Value 9, Value 10, Value 11
我应该得到这个输出:空字符串或空字符串,因为Attribute D
输入字符串中不存在
对于输入此字符串:
Attribute B: Value 1, Value 2, Value 3 Attribute C: Value 4 Attribute D: Value 5, Value 6, Value 7, Value 8 Attribute E: Value 9, Value 10
我应该得到这个输出:Value 5, Value 6, Value 7, Value 8
我认为这里需要一系列 PHP ifs 和字符串函数,但我想知道是否有人可以记下条件提取代码.. 会加快我的速度:)
自己编写了代码:
我首先将字符串分解为子字符串,:
用作分隔符。然后我遍历每个子字符串并搜索Attribute D
字符串。如果找到,我知道下一个子字符串将具有Attribute D
. 然后我只是从下一个子字符串中删除最后一个单词(即删除下一个Attribute's
名称)。
虽然这段代码中有 2 个缺陷(虽然不会在我的环境中发生).. 希望你们能找到它们 :)
这是我使用的最终代码:
<?php
$subStrings = explode(':',$product['description']);
$arrayIndexContainingAttributeD = -1;
$length = count($subStrings);
for ($i = 0; $i < $length; $i++)
{
if(strpos($subStrings[$i], 'Attribute D') != false)
{
$arrayIndexContainingAttributeD = $i + 1;
break;
}
}
$attributeDStringAvailable = false;
if($arrayIndexContainingAttributeD != -1 && $arrayIndexContainingAttributeD<$length)
{
$attributeDString = preg_replace('/\W\w+\s*(\W*)$/', '$1', $subStrings[$arrayIndexContainingAttributeD]);
$attributeDStringAvailable = true;
}
?>
<?php if ($attributeDStringAvailable == true) { ?>
<h3><a href="<?php echo $product['href']; ?>"><?php echo $attributeDString; ?></a></h3>
<?php } ?>