これは一晩中私を夢中にさせてきました。基本的に、値をサニタイズした後、多次元配列に特定の値を設定する必要があります (おそらく、検証に依存します。検証に失敗した場合、値を空の文字列に設定する必要があります)。この投稿配列があるとしましょう:
$data['should']['be']['int'] = ' yjd';
で値をサニタイズした後filter_var( $value, FILTER_SANITIZE_NUMBER_INT );
、空の文字列が返されます。次に、何らかの方法で値を$data['should']['be']['int']
空の文字列に設定する必要があります。
この値は検証関数に渡されますが、空の文字列が整数ではないため失敗します。繰り返しになりますが、その検証済みの値を$data['should']['be']['int']
空の文字列に設定する必要があります。
検証全体が開始される前に、関連するすべてのキーを配列に保存しているので、サニタイズまたは検証が必要になるまでに、次のようなものが利用可能になります。
$keys = array(
0 => 'should',
1 => 'be',
2 => 'int'
);
$data
次に、配列を参照して新しい値を設定することにより、 foreach ループで上記のキーを使用して配列にアクセスしようとしましたが、何を試してもアクセス&$data
できませんでした。上記は単純化した例です。$data
全体が検証クラスの一部であるため、渡された配列の正確な深さはわかりません。
どんなポインタでも大歓迎です!ご協力いただきありがとうございます!
編集: 投稿を編集できないと思っていましたが、インターネット接続だけになってしまいました. 以下の私のコメントは無視してください。とにかく、再帰的に呼び出してみたメソッドは次のとおりです。
protected function set_value( &$data, $value ) {
foreach( $data as &$val ) {
if( is_array( $val ) ) {
$this->set_value( $val, $value );
} else {
$val = $value;
}
}
}
ループを開始するには、次のようにしました。
$this->set_value( $data[$keys[0]], $value );