0

我有一个用于一些 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 脚本中。

基本上我的目标是编写上面的变量,而不必每次都实际编写一个新变量。

4

2 回答 2

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(基于 function-name post_data()),您可以查看 PHP 的extract()函数,它为您执行相同的“提取”:

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_#变量是什么,所以我在数组示例中将其保留为变量变量;如果它只是一个字符串,则可以将其替换为字符串。

于 2013-01-07T19:34:34.177 回答
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.
于 2013-01-07T19:33:12.993 回答