好吧,我从外部API获取数据,这些数据会破坏Steam市场的数据。
现在我收到如下字符串,
Desert Eagle | Night (Field-Tested)
然后我想要做的就是得到什么类型的武器,它的名字是什么以及穿什么。
这就是我试图让它熄灭的原因
Desert Eagle
Night
Field-Tested
或FT
这是我用来执行此操作的代码,
$item_wear = preg_replace('/^.*(\(.*\)).*$/', '$1', $item); //(Field-Tested)
$item_wear_short = preg_replace("/(?![A-Z])./", "", $item_wear); //FT
$exp_item_version = explode(" | ", str_replace($item_wear,"", $item)); //Array of Desert Eagle and Night
$item_version = $exp_item_version[0]; //Desert Eagle
$item_name = $exp_item_version[1]; //Night
这基本上就是我所做的,但现在如果有一个名为的项目,
Chroma Case Key
它会做各种各样的事情,而对于没有穿戴的字符串或任何我喜欢的字符串,$item_name
是Chroma Case Key
并且其他字符串只返回空,任何正确的方法这样做?在我看来,我使用的代码看起来相当混乱,我可以改变什么?
答案 0 :(得分:2)
首先你要检查是否有|,这会告诉你有没有版本&穿在字符串中,如果没有,则假设字符串=项目名称。
$item_name = '';
$item_version = '';
$item_wear = '';
$item_wear_short = '';
$split = explode('|',$item);
$item_name = $split[0];
if(count($split)==2){ // Has version and possibly wear
$version_and_wear = $split[1];
// check for wear
$wear_index = strpos($version_and_wear, '(');
if($wear_index!==false){ // contains wear
$wear_end_index = strpos($version_and_wear, ')',$wear_index);
if($wear_end_index!==false){
$item_wear = substr($version_and_wear,$wear_index+1,$wear_end_index-$wear_index-1); // extract wear
$item_wear_short = preg_replace("/(?![A-Z])./", "", $item_wear); //FT
$version_and_wear = substr($version_and_wear,0,$wear_index); // remove wear from item string
}
}
$item_version = trim($version_and_wear); //remove whitespaces at the beginning and end of the string
}
答案 1 :(得分:1)
对于给定的情况,您可以使用pre_split()
和三个分隔符。
$str="Desert Eagle | Night (Field-Tested)";
$data=preg_split( "/[\(\)|]/", $str );
var_dump($data);
您可以根据自己的要求进一步扩展。 Here 如果需要,你会找到更多解释。