8

誰かがあなたが参照としてキーを渡すことができない理由を私に説明できますか?

元:

if(is_array($where)){
    foreach($where as &$key => &$value){
        $key = sec($key);
        $value = sec($value);
    }
    unset($key, $value);
}

スロー:

Fatal error: Key element cannot be a reference in linkstest.php on line 2   

array_mapを使用して同様のことを行うことはできますか?私がやりたいのは、連想配列を反復処理し、sec()関数を使用してキーと値の両方をエスケープすることです。

配列マップを理解するのは難しいです:

array_mapで多くのことを試しましたが、キーに直接作用させることができません。

foreachループを使用するよりも、配列マップを使用するとパフォーマンスが向上しますか?

foreachについて私が気に入らないのは、配列に直接作用することができず、一時配列の作成と設定解除に対処する必要があることです。

foreach($where as $key => $value){
 $where[secure($key)] = secure($value);
}

キーにエスケープするものが見つかった場合、これは失敗する可能性があり、新しい要素を追加し、エスケープされていない要素を保持します。

だから私はこのようなもので立ち往生していますか?

$temparr = array();
foreach($where as $key => $value){
 $temparr[secure($key)] = secure($value);
}
$where = $temparr;
unset($temparr);

代替案はありますか?

4

2 に答える 2

10

誰かがあなたが参照としてキーを渡すことができない理由を私に説明できますか?

言語がこれをサポートしていないためです。ほとんどの言語でこの機能を見つけるのは難しいでしょう。したがって、キーという用語があります。

だから私はこのようなもので立ち往生していますか?

はい。最良の方法は、適切なキーを使用して新しい配列を作成することです。

代替案はありますか?

より良い代替案を提供する唯一の方法は、特定の状況を知ることです。キーがテーブルの列名にマップされている場合、最善のアプローチは、キーをそのままにして、SQLでの使用時にキーをエスケープすることです。

于 2011-09-30T22:49:45.333 に答える
0

なぜそれをするのが問題なのですか?それを関数にします。関数は入力を受け取り、出力を提供します。関数入力は「保護されていない」配列になります。出力は、アレイを保護した結果になります。

その後、あなたはただします

$where = secureMyArray($where);

だからあなたは関数を作る能力を持っています...

于 2011-09-30T22:13:10.130 に答える