2016-03-04 55 views
-2

我在StackOverflow中搜索了每一個str_replace,preg_replace,substr,並且無法將其包裹。使用函數操縱PHP中的字符串

我的數據中的字符串是這樣的:「010758-01-700」或「860862-L-714」。這些只是例子。

這些字符串是的

實例1:

010758-01-700 /ImageServices/image.ashx?itemid=010758 &配置= 01 &格式= 1 &圖像NUMBER = 1

如果在URL仔細看,它上面的字符串,我需要拆分這是「01075 &配置= 01」落「 - 700" 從字符串返回一個值I可以插入到URL

實例2:

860862-L-714 /ImageServices/image.ashx?itemid=870078 &顏色= 001 &格式= 1 &圖像NUMBER = 1

我需要拆分此爲 「860862 & &顏色= 714」 和下降的「-XXS-,-XS-, -​​ S - ,-M-,-L所有實例 - ,-XL-,-XXL-「爲字符串返回我可以插入的值到網址

在整個數據中,有860862-L-714,860862-M-999,860862-XS-744這樣的字符串。這些都是具有相同的名稱但不同的

產品的變化我都試過str_replace("-", "&config=", {ItemNo[1]})但它返回010758 &配置= 01 &配置= 700

我需要包含到所有這些,我可以調用一個函數到URL

myFunction({ItemNo[1]}) 

然後我可以設置URL作爲這樣/ImageServices/image.ashx?itemid=

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

如果我的邏輯是正確的,它應該工作。我使用WP All Import來導入XML數據。

如何創建一個基於上述兩個實例操縱字符串的函數並輸出我試圖實現的結果?

確定 - 基於的答覆,我已經解決了第一個實例,以獲得正確的URL顯示 - $內容作爲貨號

<?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個功能。

+1

這裏有問題嗎? –

+0

對不起,我已澄清。 – thisisbolo

+1

如何讓這些字符串結構化以使其具有動態性,這並沒有足夠的內聚力。你需要根據查詢中的參數來做'conditionals'。無論如何,這可以通過一些混合來實現:'explode()',''parse_str()'和'strpos()' – Ohgodwhy

回答

0

不要使用str_replace,使用explode代替:

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

通過這種方式,導致$chunks是一個這樣的數組:

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

所以,現在你可以在此格式所需的URL way:

$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]}"; 
} 

......但是,你真的想要一個這個東西的功能嗎?


+0

謝謝。我要弄清楚這是否可以得到我期待的結果。我已經想通了,我只需要在代碼中找出它:S – thisisbolo

+0

謝謝。我想我現在更瞭解陣列。 <?php $ str =「010758-01-700」; $ chunks = explode(「 - 」,$ str); echo'

'; print_r($chunks); echo '
'; ?> 這有助於我理解輸出。 – thisisbolo

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. 
} 

希望這會有所幫助。

+0

看起來我需要研究陣列是如何工作的。感謝您的指導!我會回來的。 – thisisbolo