私はPHPに非常に慣れていないので、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
リストされている可能性があることに注意してください。
問題:
forが存在するときはAttribute D
いつでも、のすべての値を抽出したい。Values
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 ifと文字列関数が必要だと思いますが、誰かが条件付き抽出コードを書き留めることができるかどうか疑問に思っています..私を大いにスピードアップします:)
自分でコードを作成しました:
まず、区切り文字として使用して、文字列を部分文字列に分割し:
ます。次に、各部分文字列を調べて文字列を検索し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 } ?>