eval()
の代替案を見つけることはよくある話ですが、私はこれまでにやっていないことをやろうとしています。私は既知の形式のCSVファイルを処理しています。利用可能なソース列に応じてデータをどのように処理するかに関するルールを作成しました。PHPのルールを処理する代わりのeval?
ここに私がしていることの単純化された例があります。この例では、$linedata
はCSVファイルからの1行のデータを表します。 $key["type"]
私はデータが必要な列を指しています。この列に「IN」の値が入っている場合は、$newcol
を「個人」に設定し、そうでない場合は「組織」に設定します。
$key["type"] = 12;
$linedata[12] = 'IN';
$rule = '($linedata[($key["type"])] == "IN" ? "individual" : "organization");';
eval ('$newcol = ' . $rule);
したがって、$rule
はロジックを格納します。 $linedata
アレイのフィルタを実行して、CSVファイルから悪意のあるコードが漏れないようにすることができますが、このようなルールを格納して処理するより良い方法があるのだろうか?
ルールの作成場所はわかりません。あなたはcsvファイルから得たPHPコードを評価しようとしていますか、あるいはあなたの処理コードで定義されているルールですか?ルールが処理コードで定義されている場合は、関数を使用するだけです。 –
実際には、データのスニペットと処理された出力を確認するのに役立ちます。あなたがしようとしているのはマッピングなので、そのための 'eval'は必要ありません。 – netcoder
@netcoder - はい、私はマッピングをしようとしていますが、問題はCSVファイルが常に同じ順序で列を持つとは限りません(キーを定義する理由です)。回答はまだ目標に達していないので、質問を編集してより明確にします。 –