1

のコードで配列を渡すにはcreate_function()、それをパラメータに渡すことが機能します。

$array = array('a', 'b', 'c');

$func = create_function('$arr', '
            foreach($arr as $var) echo "$var<br />";
        ');

$func($array);

しかし、機能と同じように、コードに配列を直接埋め込みたいと思いeval()ます。このような、

$array = array('a', 'b', 'c');
eval( 'foreach($array as $var) echo "$var<br />";');

ただし、これは機能しません。

$array = array('a', 'b', 'c');

$func = create_function('', '
            foreach(' . $array . ' as $var) echo "$var<br />";
        ');

$func();

では、どうすればよいですか?あなたの情報をありがとう。

4

4 に答える 4

2

ラムダ関数の代わりにcreate_functionを主張する場合

$func = create_function('', '
  foreach(' . var_export($array, true) . ' as $var) echo "$var<br />";
');

phpパーサーの配列の(有効な)文字列表現が必要です。var_exportはそれを提供します。
しかし、ベリー・ランゲラックの答えは進むべき道です。

于 2012-09-20T10:37:37.337 に答える
1

PHP> = 5.3を使用する場合、create_functionの代わりに無名関数を使用できます。匿名関数は、外部スコープの変数を「使用」できます。

<?php
$array = array('a', 'b', 'c');

$func = function( ) use( $array ) {
    foreach( $array as $value ) {
        echo $value;
    }
};

$func( );
于 2012-09-20T10:37:14.053 に答える
0

クロージャーを使用します。

$function = function($array){

    foreach($array as $var){

        // do your stuff

    }

};

$function($yourArray);
于 2012-09-20T10:37:55.097 に答える
-1

私はこれを教育目的でのみ投稿しています(これは非常に悪い習慣です):

<?php

$array = array('a', 'b', 'c');

$func = create_function('', '
            global $array;
            foreach($array as $var) echo "$var<br />";
        ');

$func();

なぜそんなにひどいのですか?

  • グローバル変数
  • 関数を作成する醜い方法

PHPのバージョンが5.3以上の場合は、ラムダ関数を使用してください。@BerryLangerakの回答を参照してください

于 2012-09-20T10:38:55.657 に答える