2012-12-24 42 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 
} 

如果你仍然认为常量就是你所需要的 - 更好地问另一个问题,解释了为什么是这样,并告诉你在做什么错