PHP如何将我的变量压缩成FOR循环?

时间:2013-01-07 19:30:39

标签: php

我有一些变量列表,我将其用于某些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脚本中。

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

2 个答案:

答案 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.