用函数操作PHP中的字符串

时间:2016-03-04 20:22:12

标签: php string

我搜索了StackOverflow上的每一个str_replace,preg_replace,substr,并且无法解决这个问题。

我的数据中的字符串是这样的:" 010758-01-700"或" 860862-L-714"。这些只是一些例子。

这些字符串是

实例1:

  

010758-01-700   /ImageServices/image.ashx?itemid=010758&config=01&format=l&imagenumber=1

如果仔细查看网址及其上方的字符串,我需要将其拆分为" 01075& config = 01"并放弃" -700"从字符串返回一个值,我可以插入到URL

实例2:

  

860862-L-714   /ImageServices/image.ashx?itemid=870078&color=001&format=l&imagenumber=1

我需要将其拆分为" 860862&& color = 714"并删除" -XXS - , - XS - , - S - , - M - , - L - , - XL - , - XXL - "的所有实例。为字符串返回一个值,我可以插入到URL

在整个数据中有一些看起来像这样的字符串,860862-L-714,860862-M-999,860862-XS-744。这些是具有相同名称但不同的产品的变体

我已尝试过str_replace("-", "&config=", {ItemNo[1]}),但它返回010758& config = 01& config = 700

我需要将此全部包含在一个可以调用URL的函数中

myFunction({ItemNo[1]})

然后我可以设置URL,因为/ImageServices/image.ashx?itemid =

myFunction({ItemNo[1]})&format=l&imagenumber=1

如果我的逻辑是正确的,它应该有效。我使用WP All Import来导入XML数据。

如何根据上述两个实例创建一个操作字符串的函数,并输出我试图实现的结果?

好的 - 根据回复,我已经解决了第一个实例以获取正确的网址显示 - $ content是ItemNo

<?php
function ItemNoPart1 ( $content ) {
$content1 = explode("-", $content);
return $content1[0];    
}

function ItemNoPart2 ( $content ) {
$content2 = explode("-", $content);
return $content2[1];    
}   
?>

/ImageServices/image.ashx?itemid=[ItemNoPart1({ItemNo[1]})]&config=[ItemNoPart2({ItemNo[1]})]&format=l&imagenumber=1

现在我只需要弄清楚如何进行第2部分并将其全部合并为1个函数。

2 个答案:

答案 0 :(得分:0)

请勿使用str_replace,而是使用explode

$str = '010758-01-700';
$chunks = explode( '-', $str );

通过这种方式,生成的$chunks是这样的数组:

[0] => 010758
[1] => 01
[2] => 700

所以,现在你可以用这种方式格式化所需的URL:

$url = "/ImageServices/image.ashx?itemid={$chunks[0]}&config={$chunks[1]}&format=l&imagenumber=1"

您想要的功能是:

function myFunction( $itemID )
{
    $chunks = explode( '-', $itemID );
    return "/ImageServices/image.ashx?itemid={$chunks[0]}&config={$chunks[1]}";
}

...但是,你真的想要这个东西的功能吗?

答案 1 :(得分:0)

这是一些伪造的代码,可能会引导您朝着正确的方向前进。我们的想法是构建一个数组,其中包含来自字符串的可能数据的全部

我已经使用了/ImageServices/image.ashx?的给定常量来分割,因为我们知道了我们的端点的URL。

// explode our string into multiple parts
$parts = explode('/ImageServices/image.ashx?', $str);

// we know that the string we need to parse as at the index of 1
parse_str($parts[1], $parsed);

//$wanted will contain all of the data we can possibly need.
$wanted = array($parts[0], $parsed);

这将产生一个如下所示的数组:

array (
    0 => '860862-L-714 ',
    1 => 
        array (
           'itemid' => '870078',
           'color' => '001',
           'format' => 'l',
           'imagenumber' => '1',
    ),
)

现在您可以执行条件,例如当您需要查找color并创建特定的URL结构时:

if(array_key_exists('color', $wanted[1]){
    //create our custom sting structure here.
}

希望这有帮助。