2

私の理解に基づいて、これが list() の仕組みです。

list($A1,$A2,$A3) = array($B1,B2,B3);

の助けを借りて、list()それに応じて配列から値を割り当てることができます。
これが私の質問です...動的リスト()を生成する方法は?

1)。データベースの戻り結果に基づいて、その数はわかりませんが、すべてを配列
2に割り当てます)。そのため、 count(array) を使用してその数を知ることができます。
3)。では、そのリストを生成/準備するにはどうすればよいですか?

例: クライアント A には 3 人の子供がいて、Apple、Boy、Cat という名前なので、私はそれを使用list($kid1, $kid2, $kid3)します。

しかし、クライアント B に 3 人以上の子供がいる場合、最初の 3 人しか得られません。クライアント C に子供が 1 人しかいない場合は、エラーが発生します。

上記の状況に基づいている場合、使用せずに解決する方法はたくさんありますがlist() 、使用して解決策を知りたい、または見つけたいlist()です。

カウントに基づいて動的list()ベースを生成する方法array()

ありがとう男/ギャル

4

4 に答える 4

5

可変数の要素がある場合は、それらに配列を使用してください! 扱う変数の数がわからない場合、それらを個々の変数に抽出しても意味がありません。$kid1を介してこれらの値を変数に抽出した$kidNとします。これに続くコードは何をするのでしょうか? 現在、スコープ内にいくつの変数があるのか​​ わかりません。また、それらを見つけたり、$kid1通過したかどうかをテストした後に反復したりする実用的な方法も$kidNありissetません。それは変数の非常識な使用です。配列を使用するだけです。

そうは言っても、可変変数

$i = 1;
foreach ($array as $value) {
    $varname = 'kid' . $i++;
    $$varname = $value;
}
于 2012-09-23T06:45:16.523 に答える
0

このためにcreate_function()を使用してラムダ式を作成できます。list()は、式内でのみアクセスできます。

于 2012-09-23T06:17:54.757 に答える
0

これは、PHP のlist目的ではありません。PHPの公式ドキュメントより

list is not really a function, but a language construct. 
list() is used to assign a list of variables in one operation.

つまり、コンパイラは実際に関数を呼び出すのではなく、コードを変数の割り当てと割り当てに直接コンパイルします。

  • 次のようにコンマを設定することで、特定の要素にスキップできます。

    list($var1, , $var2) = Array($B1, B2, B3);

    echo "$var1 is before $var2 \n";

  • または3番目の要素を取る

    list( , , $var3) = Array($B1, B2, B3);

(私は、B2、B3 が定数であると仮定していますか? それとも、欠落してい$ますか?)

特に を使用するlistと、PHP を使用して、variable variables次のように任意の 1 次元配列から変数を作成できます。

$arr = array("arrindex0" => "apple", "banana", "pear");
reset($arr);
while (list($key, $val) = each($arr)) {
    $key = is_numeric($key) ? "someprefix_" . $key : $key;
    echo "key sdf: $key <br />\n";
    $$key = $val;
}
var_dump($arrindex0, $someprefix_0, $someprefix_1);

結果

string 'apple' (length=5)
string 'banana' (length=6)
string 'pear' (length=4)
于 2012-09-23T06:36:35.817 に答える
0

$A1, $A2, .... $ANこれにより、配列内の各要素の変数が作成されます。

$list =  array("a", "b", "c", "d");

extract(array_combine(array_map(function($i) {
        return "A" . $i;
    }, range(1, count($list))), $list));

echo implode(" ", array($A1, $A2, $A3, $A4)), PHP_EOL;

コールバックで変数の名前を変更できarray_mapます。本番環境でそのようなコードが見られないことを願っています ;)

于 2012-09-23T06:41:52.870 に答える