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それぞれをタイプしたくないですか?

その場合は、変数と呼ばれるものを使用できます-変数

$varName = 'saveData_16';
$postName = 'url_16';
$$varName = post_data($$postName);

$$変数名の接頭辞が2つあることに注意してください。

これは、次のループにドロップできます。

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抽出の動作を指定するフラグであるという名前のオプションの2番目のパラメーターを提供します。これにより、既存の変数を上書きしないように指示できます。

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'];

私はあなたの$url_#変数が何であるかを100%確信していないので、配列の例ではそれを変数変数として保持しました。文字列だけの場合は、代わりに文字列に置き換えることができます。

于 2013-01-07T19:34:34.177 に答える
2

配列を使用する必要があります。例を入力して、このコメントに追加します。しかし、使用したいのは配列変数です。1つのアレイでこれらすべてを保持でき、簡単に反復(ループ)できます。

ここに行く:

<?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 に答える