0


我无法分隔文本。
这是场景:

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

假设通过使用explode,我可以用“|”分隔单词,但是因为我检索到的值“Animal|Dog”应该是一个单词,所以在这种情况下,解决方案是什么?我也不能使用限制,因为文本的位置或数量可能不同。

区分文本的唯一方法是 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

如果您只想替换“动物|” 用“动物:”然后你可以做一个简单的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"用逗号分隔两个组成员而不是管道。这比第一种情况更复杂 - 类别名称可能会有所不同,并且您不能简单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:\w+)\|#", 告诉 PHP 查找所有$check以文本“Animal”开头的子字符串,后跟冒号,然后是包含一个或多个字符的单词字符串,并以管道结尾。这将在您的字符串中查找类别名称以及该类别的第一个成员。第二个参数 ,":$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

Apple 和 orange 之间有空格,例如 Apple | 橙子。但是 Animal 和 Dog 之间没有空格 Like this Animal|Dog。如果是这种情况,可以这样爆

$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 回答