array_values()
はArrayAccessオブジェクトでは機能しません。 もありませんarray_keys()
ArrayAccessオブジェクトではarray_valuesが機能しません
なぜですか?
私はありません、あなたがArrayAccessのの有用性を誤解してきた配列操作
array_values()
はArrayAccessオブジェクトでは機能しません。 もありませんarray_keys()
ArrayAccessオブジェクトではarray_valuesが機能しません
なぜですか?
私はありません、あなたがArrayAccessのの有用性を誤解してきた配列操作
のすべての種類を行うことができるはず$object['key']
にアクセスすることができます。これは配列のラッパーの一種ではありません。はい、それを実装するための標準的な例では、その機能がクラスによってラップされた専用の$array
変数を使用しますが、それは特に有用なものではありません。多くの場合、配列を使用することもできます。
ArrayAccessの良い例の1つは、スクリプトが使用可能な変数を知らない場合です。
非常にばかげた例として、リモートサーバーで動作するオブジェクトを想像してみてください。そのサーバー上のリソースは、ネットワーク経由でAPIを使用して読み取り、更新、および削除できます。プログラマは、配列のような構文でその機能をラップすることを決定します。したがって、$foo['bar'] = 'foobar'
は、そのサーバー上のbar
リソースをfoobar
に設定し、echo $foo['bar']
はそれを取得します。このスクリプトには、すべての可能な値を試すことなく、どのキーまたは値が存在するかを知る方法がありません。
ArrayAccessでは、配列の構文を使用してオブジェクトを設定、更新、取得、または削除するための配列構文を使用できます。
別のインターフェイスCountable
は、count()
の使用を許可します。両方のインターフェイスを同じクラスで使用できます。理想的には、おそらくarray_values
またはarray_keys
を行うことができるインターフェイスを含むより多くのインターフェイスが存在しますが、現在は存在しません。
ArrayAccess
は非常に限られています。ネイティブのarray_
機能を使用することはできません(既存のインターフェイスはありません)。
オブジェクトに対してさらに配列のような操作を行う必要がある場合は、基本的にコレクションを作成しています。コレクションはそのメソッドで操作する必要があります。
したがって、オブジェクトを作成し、ArrayObjectを拡張します。これはIteratorAggregate
,Traversable
,ArrayAccess
,Serializable
およびCountable
を実装しています。あなたが次に
public function array_keys($search_value = null, $strict = false)
{
return call_user_func_array('array_keys', array($this->getArrayCopy(), $search_value, $strict));
}
することができます:あなたは、キーが必要な場合は、単にarray_keys
メソッドを追加
foreach ($object->array_keys() as $key) {
echo $object[$key];
}
ArrayObject
/ArrayAccess
は、オブジェクトが配列として動作することができますが、彼らはまだですオブジェクト。
var_dump(array_keys(get_object_vars($ArrObj)));
をか(array) $ArrObj
、例えばによって配列にそれをキャストすることによって、あなたのArrayObjectを変換しますので、代わりに(アレイ上でのみ動作)array_keys()
のあなたには、例えば、get_object_vars()
を使用する必要があります:
var_dump(array_keys((array)$ArrObj));
例を示してください。 – powtac
array_keys($ arrayaccessobject); ? – thelolcat
array_key_exists()も動作しないというhttp://www.php.net/manual/en/class.arrayaccess.php#104061というコメントがあります。 – powtac