2015-12-20 50 views
1

我有一個字符串,它看起來像這樣"%one_two_three_four"我該如何將這個分配爲單獨的變量?

如何設置:

$a = "one" $b = "two" $c = "three" $d = "four"

+0

不只是'substr(1,4)'當然是 –

+0

你可以使用'preg_replace_callback'。拉''%'和字符串結尾之間的所有內容,然後在'_' – chris85

+0

@ K.Randy上爆炸請你能更詳細地描述字符串嗎?它只是字符串或模式,或者它是如何變化的? – Gordon

回答

4

以保持它很簡單,你可以做到這一點

$in = "%one_two_three_four" 

// remove the % 
$t = str_replace('%', '', $in); 

// split the string on each underscore into an array 
$t = explode('_', $t); 

// assign the array values to scalar variables 
$a = $t[0]; 
$b = $t[1]; 
$c = $t[2]; 
$d = $t[3]; 
1

你可以做到這一點很容易

sscanf('%one_two_three_four', '%%%[^_]_%[^_]_%[^_]_%s', $a, $b, $c, $d); 

這將在第一個參數根據在第二個參數的圖案分析字符串和分配任何匹配的值到其餘參數。

圖案解釋:

  • %%是文字%
  • %[^_]是一切,但下劃線
  • _是文字下劃線
  • %s是任意字符串

您還可以使用

list($a, $b, $c, $d) = preg_split(
    '#[%_]#', 
    '%one_two_three_four', 
    null, 
    PREG_SPLIT_NO_EMPTY 
); 

這將通過給定模式分割字符串並從找到的分配結果火柴。第四個參數確保我們只得到非空結果。

該模式表示:按下劃線或百分比分割。

+1

優秀的答案,我不知道爲什麼有人低估了它,+1從我身邊。 – starkeen

+1

@Starkeen謝謝。我也很困惑dv是什麼。 – Gordon

相關問題