0


文章の区切りがつかなくて困っています。
これはシナリオです:

$check = "Apple|Orange|Animal|Dog|Grape";

爆発を使用して単語を「|」で区切ることができたとしますが、取得した値「Animal|Dog」は単語である必要があるため、この場合、解決策は何でしょうか?? テキストの位置や数が異なる可能性があるため、 limit も使用できませんでした。

テキストを明確に区切る唯一の方法は、Animal キーワードです。php に mysql LIKE 構文に似た関数はありますか?

ケース 2 の場合

$check = "Apple|Orange|Animal:Dog|Cat|Grape";
OR
$check = "Apple|Orange|Animal:Fish|Bird|Grape";

動物の名前が異なる場合があります。
出力
"Apple|Orange|Animal:Dog,Cat|Grape" or "Apple|Orange|Animal:Fish,Bird|Grape"
ありがとうございます。

4

4 に答える 4

1

「アニマル|」を置き換えるだけなら 「Animal:」を使用すると、次の簡単なことができますstr_replace

$check = "Apple|Orange|Animal|Dog|Grape";
$newCheck = str_replace("Animal|","Animal:"); // will be set to 'Apple|Orange|Animal:Dog|Grape'

そうですか?

ケース2の編集:

のような文字列"Apple|Orange|Animal:Dog|Cat|Grape"があり、カテゴリの後にカテゴリの 2 つのメンバーが続くと仮定します。あなたが言ったことから、この文字列を"Apple|Orange|Animal:Dog,Cat|Grape"、パイプの代わりに 2 つのグループ メンバーを区切るカンマで変換したいと考えています。これは最初のケースよりも複雑です。カテゴリ名が異なる可能性がありstr_replace、グループの最初のメンバーも異なる可能性があるため、コロンで始まる単純なことはできません。この場合、正規表現を使用して、文字列のパターンを照合して置換する必要があります。コードは次のとおりです。

$check = "Apple|Orange|Animal:Dog|Cat|Grape";
$newCheck = preg_replace("#(Animal:\w+)\|#", "$1,", $check); // will be set to "Apple|Orange|Animal:Dog,Cat|Grape"

デモ

正規表現に慣れていない場合に備えて、これが何をするのか説明しましょう。preg_replace関数の最初の引数 は、テキスト「Animal」で始まり、その後にコロンが続き、次に 1 つ以上の文字を含む単語の文字列で、パイプで終わる"#(Animal:\w+)\|#"すべての部分文字列を探すように PHP に指示します。$checkこれにより、カテゴリ名と、文字列内のそのカテゴリの最初のメンバーが検索されます。2 番目の引数 は":$1,"、このパターンの後の最初のパイプをカンマに変更するよう PHP に指示します。別のカテゴリ名がある場合は、preg_replace関数の最初の引数として渡すパターンを変更するだけです。

$check = "Apple|Orange|Animal1:Fish|Bird|Grape";
$newCheck = preg_replace("#(Animal1:\w+)\|#", "$1,", $check); // will be set to "Apple|Orange|Animal1:Fish,Bird|Grape"

これが難しい場合はお知らせください。

于 2012-08-14T03:43:31.120 に答える
0

このアップルのように、アップルとオレンジの間にスペースがあります。オレンジ。しかし、この動物|犬のように動物と犬の間にスペースはありません。これが状況なら、このように爆発させることができます

$check = "Apple | Orange | Animal|Dog | Grape";
$ex=explode(" | ", $check);

配列を次の形式で返します

array("Apple","Orange","Animal|Dog","Grape");

上記の配列をもう一度操作して、Animalを取得できます

これがあなたの意図したことだといいのですが

編集:大まかな解決策は次のようになります:

<?
$check = "Apple|Orange|Animal|Dog|Grape";
$ex=explode("|",$check);
if(in_array("Animal",$ex))
{
    echo "Animal:";
}
if(in_array("Dog",$ex)){
    echo "Dog";
}
?>

したがって、この場合、動物と犬の位置は重要ではありません

于 2012-08-14T03:19:41.393 に答える
0

これを処理する方法は、| の代わりに / を使用することです。カテゴリとアイテムの間。| を保持したい場合は、別の区切り文字を使用してください。カテゴリとアイテムの間。

$check = "Apple|Orange|Animal/Dog|Grape";
$ex=explode("|", $check);

しかし、それをしたくない場合...カテゴリ名が「動物」のようなものであることがわかっている場合は、 | で配列を爆発させることができます。現在の値が「動物」の場合、配列内の次の要素は「犬」、「猫」などになります。ただし、これは良い解決策ではなく、複数のカテゴリ レベルでは機能しません。

于 2012-08-14T03:31:43.530 に答える
-1

str_replace("動物|","動物:",$check); その後爆発する

于 2012-08-14T03:37:05.467 に答える