2012-12-24 287 views
3

使用PHP常量我需要foreach循環使用PHP contants:在foreach循環

define('WEBS', 'http://google.com, http://yahoo.com'); 
foreach (WEBS as $a) { 
    //do something 
} 

但是我設法通過下面的代碼來做到這一點,儘管它工作正常,但集錦編輯器顯示語法錯誤。請指導我如何以正確的方式做到這一點。

foreach (get_defined_constants(true)['user']['WEBS'] as $w) { 
//do something 
} 
+1

它轉換成數組 –

回答

6

你必須explode第一

foreach (explode(', ', WEBS) as $url) { ... 

explode()將字符串分解爲一個數組,這樣你可以通過它


迭代或者價值觀,你甚至可以用preg_split

foreach(preg_split('/,\s*/', WEBS) as $url) { ... 

preg_split()允許您基於正則表達式拆分字符串。它返回一個數組。作爲一個例子,使用這個正則表達式,逗號後面的空格是可選的。

# a string like this 
foo.com, hello.com,world.com, test.com 

# would still split properly to 
[ 
    'foo.com', 
    'hello.com', 
    'world.com', 
    'test.com' 
] 

正則表達式方法並不總是必需的。但我想我會告訴你,有必要的時候有更多的控制可用。


集錦正顯示出你的錯誤,因爲你不能使用後[]一個func()之前,PHP 5.4。要解決這個問題,你可以做這樣的事情:

$constants = get_defined_constants(true); 
$constants['user']['WEBS']; 

但是在這種情況下WEBS應該只是罰款。你遇到的唯一問題是你需要首先將字符串轉換爲數組。

-1

看起來像濫用常量。

看來你需要一個數組類型的常規變量。

$webs = array('http://google.com', 'http://yahoo.com'); 
foreach ($webs as $a) { 
    //do something 
} 

如果你仍然認爲常量就是你所需要的 - 更好地問另一個問題,解釋了爲什麼是這樣,並告訴你在做什麼錯