【发布时间】:2014-06-19 16:03:53
【问题描述】:
所以,我在 foreach 循环中有一个 switch 语句,它检查数组中字段的值,并使用该值为每个唯一值构建一个命名数组和电子邮件地址变量。问题在示例代码下方。
例如,如果值为 foo、bar 和 foobar,则会发生以下情况:
switch($value['value']) {
case 'foo':
if(!isset($foo)){
$foo = array();
}
if(!isset($email_foo)){
$email_foo = convert_to_email($value['value']);
}
array_push($foo, $value);
break;
case 'bar':
if(!isset($bar)){
$bar = array();
}
if(!isset($email_bar)){
$email_bar = convert_to_email($value['value']);
}
array_push($bar, $value);
break;
case 'foobar':
if(!isset($foobar)){
$foobar = array();
}
if(!isset($email_foobar)){
$email_foobar = convert_to_email($value['value']);
}
array_push($foobar, $value);
break;
default:
if(!isset($default)){
$default = array();
}
if(!isset($email_default)){
$email_default = 'this@isemail.com';
}
array_push($default, $value);
}
产生 4 个不同的电子邮件地址:
$email_foo = 'foo@isemail.com';
$email_bar = 'bar@isemail.com';
$email_foobar = 'foobar@isemail.com';
$email_default = 'default@isemail.com';
还有 4 个不同的数据数组:
$foo = array(
0 => array(
'value' => 'F Oo',
'name' => 'Janet',
'age' => 23
),
1 => array(
'value' => 'F Oo',
'name' => 'Doug',
'age' => 42
)
)
$bar = array(
0 => array(
'value' => 'B Ar',
'name' => 'James',
'age' => 23
),
1 => array(
'value' => 'B Ar',
'name' => 'Donald',
'age' => 42
)
)
等等……
那么,问题来了: 是否可以编写一个可用于创建所有命名数组和电子邮件变量的类?有点像这样:
class Account_Manager_Build
{
public function __construct()
{
if(!isset($this)){
$this = array();
}
if(!isset("email_$this")){
"email_$this" = convert_to_email($this->value['value']);
}
array_push($this, $this->value);
}
}
出于测试目的,以下是整个示例中使用的函数 convert_to_email:
function convert_to_email($input){
$returned = strtolower(substr($input, 0, 1)).strtolower(end(str_word_count($input, 2))).'@ismail.com';
return $returned;
}
【问题讨论】:
-
使用您设计的示例,很难理解您实际上想要做什么。你能不能用更多的上下文来解释它,或者不用 foo/bar,而是用真实的例子来解释它?