我有一些变量列表,我将其用于某些PHP函数。我知道我可以简化这段代码,但我不确定如何。我试过for(){}循环,但还没弄明白如何使结果可用。
这里是我的变量
$saveData_1 = post_data($url_1);
$saveData_2 = post_data($url_2);
$saveData_3 = post_data($url_3);
$saveData_4 = post_data($url_4);
$saveData_5 = post_data($url_5);
$saveData_6 = post_data($url_6);
$saveData_7 = post_data($url_7);
$saveData_8 = post_data($url_8);
$saveData_9 = post_data($url_9);
$saveData_10 = post_data($url_10);
$saveData_11 = post_data($url_11);
$saveData_12 = post_data($url_12);
$saveData_13 = post_data($url_13);
$saveData_14 = post_data($url_14);
$saveData_15 = post_data($url_15);
$saveData_16 = post_data($url_16);
$saveData_17 = post_data($url_17);
$saveData_18 = post_data($url_18);
$saveData_19 = post_data($url_19);
$saveData_20 = post_data($url_20);
这是我做过的事
for($i = 0; $i<20; $i++) {
$saveData = '$saveData_'.$i;
$postData = 'post_data($url_'.$i.')';
print($saveData. '=' .$postData. ';');
}
这在很大程度上起作用,它打印出我的变量列表。但我不知道的是,如何使其可用,而不是将它们打印到浏览器中显示的页面,而是将它们“打印”到我的php脚本中。
基本上我的目标是编写上面的变量,而不必每次都写一个新的变量。
答案 0 :(得分:3)
如果我理解你的问题是正确的,你想要使用可以使用的实际“变量”,例如$saveData_16
,但又不想输入每个变量?
如果是这种情况,你可以称之为variable-variable:
$varName = 'saveData_16';
$postName = 'url_16';
$$varName = post_data($$postName);
请注意变量名称前面的双$$
。
这可以通过以下方式放入循环中:
for ($i = 0; $i < 20; $i++) {
$varName = 'saveData_' . $i;
$postName = 'url_' . $i;
$$varName = post_data($$postName);
}
变量变量可能很难记住,也很难跟上,尤其是当它们包含与现有变量类似的名称/值时。如果他们这样做,他们可以轻松覆盖代码中的重要变量。如果这是一个潜在的问题,你应该避免它们。
变量变量的替代方法,但在同一主题上,如果您的值确实来自$_POST
(基于函数名post_data()
),则可以查看PHP的{{3为您执行相同“提取”的函数:
extract($_POST);
我建议不要使用extract()
,除非你非常清楚需要什么。它可以轻松覆盖使用与已发布字段相同名称的其他变量。它提供了一个名为$extract_type
的可选第二个参数,它是一个指定数据提取行为的标志,通过它可以告诉它不覆盖现有变量:
extract($_POST, EXTR_SKIP);
再说一次,这可能会因为忘记可选标志而导致头痛 - 所以如果存在风险,我会避免使用此功能。
作为附加替代方案,您可以将结果存储到数组中并按原样使用数组。我个人支持这种方法,如果你使用字符串作为数组索引,它可以像使用变量一样可读(并且比变量变量更易读)。
如果您当前正在使用$_POST
,那么您应该全部设置 - 它已经是数组形式。但是,如果您使用其他方法获取数据,则始终可以使用以下方法构建自己的数组:
// build your array
$saveData = array();
for ($i = 0; $i < 20; $i++) {
$urlName = 'url_' . $i;
$saveData['url_' . $i] = post_data($$urlName);
}
// access a value
echo $saveData['url_4'];
我不是100%确定你的$url_#
变量是什么,所以我把它保存为数组示例中的变量变量;如果它只是一个字符串,你可以用字符串替换它。
答案 1 :(得分:2)
您需要使用数组。我将输入一个示例并将其添加到此评论中。但是你想要使用的是一个数组变量。一个数组可以容纳所有这些,你可以轻松地迭代(循环)它。
这里你去:
<?php
/* what the heck? You need arrays ;-)
$saveData_1 = post_data($url_1);
$saveData_2 = post_data($url_2);
$saveData_3 = post_data($url_3);
$saveData_4 = post_data($url_4);
$saveData_5 = post_data($url_5);
$saveData_6 = post_data($url_6);
$saveData_7 = post_data($url_7);
$saveData_8 = post_data($url_8);
$saveData_9 = post_data($url_9);
$saveData_10 = post_data($url_10);
$saveData_11 = post_data($url_11);
$saveData_12 = post_data($url_12);
$saveData_13 = post_data($url_13);
$saveData_14 = post_data($url_14);
$saveData_15 = post_data($url_15);
$saveData_16 = post_data($url_16);
$saveData_17 = post_data($url_17);
$saveData_18 = post_data($url_18);
$saveData_19 = post_data($url_19);
$saveData_20 = post_data($url_20);
*/
$saveData = array(); // just a formality. You don't need to delcare variable types in PHP.
for ($i = 1; $i < 21; $i++) {
$var = 'url_'.$i;
$saveData[$i] = post_data($$var);
}
// now all your stuff is in $saveData
// what's in savedata 20? this is:
echo $saveData[20];
// you could skip all of this and just use the $_POST superglobal
$_POST[$url_20]
// I'm curious to see what you are doing, because this process should be re-thought.