基于var

时间:2017-07-16 10:17:09

标签: php arrays

我觉得我在努力寻找答案,因为我觉得我错过了一些关键信息。

我要做的是对某些数据进行循环,然后根据其中一个数据执行不同的操作。

所以我循环的数据的print_r给了我这个。这一切都很好,它只有我需要的数据,没有多余的。

Array
(
[foodid] => 1
[menuid] => 1789798798
[creatorid] => 1
[foodtype] => hotdog
[frequency] => weekly
[cost] => 20
[chargedate] => 2017-07-14 11:05:18
)

我想根据频率中的值对其进行处理。 我想要做的事情都存储在一组相同的数组中。

每周,每周2次,每月,每天。 例如

$_weekly = array(
"cost" => "2",
"order" => "5",
"years" => "0",
);

$_2weekly = array(
"cost" => "4",
"order" => "10",
"years" => "0",
);

每周2周的类似数组等。

在循环中使用类似$ workingvar的var似乎很简单。 所以当我到达那里时我可以使用$ workingvar = $ _weekly,或者$ workingvar = $ _2weekly。

那么,如何将$ workingvar的内容设置为现有数组之一呢?然后我可以在数据的每一行使用相同的循环/函数,并根据频率值包含的内容更改它所引入的值。

编辑添加的第二个数组示例。

2 个答案:

答案 0 :(得分:2)

所以你需要variable variable,在你的情况下它是:

#Data-Preprocessing: removing non-numbers 
price_data<-gsub("\n","",price_data)
price_data<-gsub("Kaufpreis","",price_data)
price_data<-gsub(" ","",price_data)
price_data = gsub("[^[:alnum:].]", "", price_data)

但是使用具有相同键的数组是更优选的解决方案(仅仅因为它更具可读性和更短):

$arr['frequency'] = 'weekly';
$_weekly = [11,22,33];

$workingvar = ${'_' . $arr['frequency']};
var_dump($workingvar);

答案 1 :(得分:1)

有很多方法可以实现这一目标。如果您可以保证57d056ed0984166336b7879c2af3657f始终具有有效值,那么像这样的全局查找数组可以执行以下操作:

frequency

然后在您的代码中,您只需分配到// Define your $_weekly, $_2weekly, etc here $freqLookup = array( "weekly" => $_weekly, "2weekly" => $_2weekly, // et cetera );

$workingvar

如果您不能保证$workingvar = $freqLookup[$data["frequency"]]; 始终拥有有效值,那么您可以先检查密钥是否存在:

frequency

一种可能的替代方案(但不那么优雅)是if (!isset($freqLookup[$data["frequency"]])) { // Throw an exception or do something to handle the error } ,而switch链则更不优雅。如果你需要为每个案例做一些非常不同的事情,他们可能有其优点。

编辑:如果您能保证数据的完整性,那么u_mulder的答案可能会更好。如果您接受用户数据,则可能存在危险。查找数组的另一个优点是可以将键映射到不同的变量,例如if ... else if ... else