在PHP中多次替换字符串

时间:2017-08-08 13:05:23

标签: php replace

好吧,我从外部API获取数据,这些数据会破坏Steam市场的数据。

现在我收到如下字符串,
Desert Eagle | Night (Field-Tested)

然后我想要做的就是得到什么类型的武器,它的名字是什么以及穿什么。

这就是我试图让它熄灭的原因 Desert Eagle
Night
Field-TestedFT

这是我用来执行此操作的代码,

$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_nameChroma Case Key并且其他字符串只返回空,任何正确的方法这样做?在我看来,我使用的代码看起来相当混乱,我可以改变什么?

2 个答案:

答案 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 如果需要,你会找到更多解释。