2

PHP で DB2 を使用しています。DB2 はすべての列名を大文字で返します。db2_fetch_assoc を使用すると、結果は次のようになります。

Array { [USERID] => 4 }

しかし、私のphpファイルでは、このように割り当てられた配列値とそのキャメルスタイル

$this->userId = $row['userId'];

したがって、エラーがスローされますError : Undefined index userId

array_change_key_case() 関数を使用して、配列を小文字に変換できます。しかし、配列値を取得して割り当てる何百ものファイルがあります。

すべてのファイルを変更することはできません。また、その Linux マシン。

配列キーの大文字と小文字の区別を無効にするためにphpで利用できる関数はありますか。

4

3 に答える 3

3

SPLからArrayObjectを拡張できます。このようにして、少なくともデータベースからデータを取得する関数/メソッドに「触れる」だけで済みます。

$row = getRow();
echo $row['userId'];

function getRow() {
    $row = array ( 'USERID' => 4, 'FOO'=>123, 'BAR'=>456 );
    return new UCArrayObject($row);
}

class UCArrayObject extends ArrayObject
{
    public function offsetExists ($index) { return parent::offsetExists(strtoupper($index)); }
    public function offsetGet($index) { return parent::offsetGet(strtoupper($index)); }
    public function offsetSet ($index, $newval) { parent::offsetSet(strtoupper($index), $newval); }
    public function offsetUnset ($index) { parent::offsetUnset(strtoupper($index)); }
}
于 2011-06-29T06:24:52.410 に答える
1

DB2についてはわかりませんが、ほとんどのライブラリは、クエリで行を指定した場合に行を返すため、SELECT USERIDSELECT useridまたはSELECT UserIdのいずれか最適なものを使用できます。

配列のキーは大文字と小文字が区別されません。

配列を模倣するクラスを作成することは可能です (PHP.net を参照してください。これを実現するには、インターフェイスを実装する必要があります)。追加するすべての値は、キーの小文字バージョンを使用して内部配列構造に追加できます。値を読み取るときは、指定したキーの小文字バージョンも使用できます。これにより、基本的に、クラスは大文字と小文字を区別しない配列のように動作します。

このようなクラスは for ループでも使用できますが、残念ながら実際に配列パラメーターを必要とする関数に渡すことはできません。

別の解決策: クエリの量がかなり少なく、データベース層がアプリケーションの残りの部分から適切に分離されている場合は、何らかの変換を適用できます。結果の配列を繰り返し処理し、変換配列を使用して、それらのキーを好きな特定のケースにマップします。たとえば、フィールド名の ('lowercase'=>'CamelCase') バージョンを含む配列を作成します。そうすれば、名前を簡単に見つけて、適切なケーシングを見つけることができます。見つかったキーを使用して、要求元のコードに返す前に新しい配列を作成できます。

これらのキーは大文字と小文字が区別されませんが、大文字と小文字が区別されます。

于 2011-06-29T06:27:08.087 に答える
0

いいえ、ありません。PHPはそれをしません。配列のケースは、ケースバイケースで交換する必要があります。

于 2011-06-29T06:20:30.417 に答える