問題タブ [spl]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - 日付付きオブジェクトのコレクションのデータ構造の選択
Incident_Collection
それぞれがインターフェイスを実装する他のオブジェクトのコレクションを保持するPHP オブジェクト (と呼びます) を設計しようとしていIncident
ます。
最初は、インシデント オブジェクトをIncident_Collection
実装して、コレクションの配列プロパティに格納するだけでよいと考えました。IteratorAggregate
しかし、Incident
オブジェクトには自然な順序があるため、おそらくSPL データ構造の 1 つを拡張する方がより適切/効率的であると考えました。しかし、どれですか?特定のデータ構造をいつ使用するかについてはよくわかりません。
もう 1 つの問題は、Incident_Collection
. たとえば、 を持つPerson
オブジェクトがあった場合Incident_Collection
、次の制限が適用される可能性があります。
- 1
Birth
件のみ - 存在する場合
Birth
は、コレクション内の最初のインシデントである必要があります - 1
Death
件のみ - 存在する場合
Death
は、コレクション内の最後のインシデントである必要があります HS_Graduation
後に来なければならないHS_Begin
Incident_Collection
所有者からの一連の制限を受け入れるジェネリック(例: Person
)、またはサブクラス化した方がよいでしょうPerson_Incident_Collection
か?
php - PHP SPL-配列にキャストするときに何が起こるかを制御するためのインターフェースまたはクラスはありますか?
したがって、、、および組み込みのインターフェイスを実装するIterator
ことArrayAccess
で、オブジェクトがループで使用されたとき、またはプロパティが配列インデックス()であるかのようにアクセスされた場合にCountable
、オブジェクト内で何が発生するかを制御できます。foreach
$object['id']
たとえば、必要に応じて、データベースのフィールドを$object['version'] += 1
自動的にインクリメントできるように設定できます。version
不足しているのは、にキャストするobject
ことarray
です。次の場合に何が起こるかを制御できるインターフェイスまたはクラスはあります(array) $object
か?どんなにあいまいであっても、組み込みのインターフェースやクラスはありますか?例:すべてのパブリックオブジェクトプロパティをダンプする通常のオブジェクトから配列への変換の代わりに(array) $object
戻りたい場合はどうなりますか?$this->propertyArray
注:配列とオブジェクトの外部の違いを可能な限り最小限に抑えることが目的であるため、メソッド名による呼び出しを要求するようなもの$object->toArray()
はカウントされません。
php - 昇順の SplPriorityQueue
以下は、SplPriorityQueue が、この場合は最新の日付に対応する最大の優先度値に最高の優先度を与えることを示しています。
優先順位として任意の日付のセットが与えられた場合、SplPriorityQueue の内容を日付の降順ではなく昇順で表示するにはどうすればよいでしょうか?
ETA: Unix のタイムスタンプを使った、ずさんな方法があります。しかし、それは Unix の時代以外では失敗します。
より堅牢な方法はありますか?
php - オブジェクトのコレクションを一意のセットに制限する
現在、私はと呼ばれるPHPクラスを持っていますCollection
。配列を使用して、一意のオブジェクトのセットを保持します。それらは異なるメモリ アドレスを持っているという意味ではなく (明らかに違いますが)、セット内に同等のオブジェクトがないという意味で一意です。
私はSplObjectStorage
、配列よりも速度が大幅に向上し、Collection
クラスよりも保守が容易である可能性があることについて読んでいます。私の問題は、SplObjectStorage
それ自体が等価性ではなく、同一性のみに関係していることです。例えば:
したがって、オブジェクトの等価性によって制限されるようにサブクラス化する方法について考えてきましたが、これまでのところ、オブジェクトを「等価署名」に設定SplObjectStorage
する必要があり、見つけるまでデータ構造をループする必要があるようです一致する値。attach()
$data
例えば:
より良い方法はありますか?
php - count()を使用してArrayAccessを実装するオブジェクトの要素をカウントしますか?
クラスがArrayAccess
インターフェイスを実装すると、OffsetGet、OffsetSetなどを備えた配列として機能する準備が整います。
私が見なかったことの1つは、必要なときの実装でしたcount()
。sizeof()
これは、PHPに関する私の限られた知識では、同じになります。
標準のPHPにすでに実装されているようなものはありますか?
php - PHPで配列を逆に繰り返す - SPLソリューション?
PHPにSPL逆配列イテレータはありますか? そうでない場合、それを達成するための最良の方法は何ですか?
私は単に行うことができます
また
しかし、もっとエレガントな方法はありますか?
php - PHPのオブジェクト反復とは
オブジェクトの反復とは何か、このコードがどのように機能するかを説明できる人はいますか?
php - PHP 5.3でSplFileObjectをシリアライズするには?
SplFileObject をシリアル化しようとしていますが、これは 5.2 でサイレントに失敗し、5.3 で致命的なエラーをスローします。これまでのところ、SplFileObject をサブクラス化し、(簡略化された) 次のコードを使用して Serializable インターフェイスを実装することで、5.2 の問題を修正しました (完全なバージョンでは $open_mode と $context も処理されますが、その質問には関係ありません)。
しかし、5.3 ではまだ致命的なエラーがスローされます。
また、魔法__sleep
や__wakeup
メソッドを追加しようとしましたが、役に立ちませんでした。
Google はそれについてあまり知らないようです。そのため、5.3 で SplFileObject をシリアル化することさえ可能かどうか疑問に思っています。
更新:その質問には答えがないようです(私のコメントを参照)。
php - RecursiveDirectoryIteratorループを使用して、現在のディレクトリ名、ファイル名、およびファイルの内容を参照するにはどうすればよいですか?
以下のスクリプトでは、$baseフォルダー内のフォルダーとファイルを反復処理しようとしています。単一レベルの子フォルダーが含まれ、それぞれに多数の.txtファイルが含まれている(サブフォルダーは含まれていない)と思います。
以下のコメントの要素を参照する方法を理解する必要があります...
どんな助けでも大歓迎です。私はこれをまとめるのに本当に近いです:-)
php - SPL の DirectoryTreeIterator を使用してディレクトリごとにファイルを並べ替える
SPL イテレータに関連するいくつかの質問 ( this oneとthis questionRecursiveIteratorIterator
) を見つけましたが、 ;のかなり高レベルの拡張機能を使用しているため、私の場合に役立つかどうかはわかりません。DirectoryTreeIterator
。_
DirectoryTreeIterator
イテレータによって出力された後、返された配列をディレクトリごとに変更する方法またはソートする方法を誰かが教えてくれませんか?
.htaccess
たとえば、可能であれば、Apacheサーバーでファイルを直接正しくソートする方法もオプションです。
DirectoryTreeIterator
これはSPLのコードです。
上記のコードを使用している理由を明確にするのは、それが私のニーズにぴったり合っているからです。先頭に空白を付けた再帰的なディレクトリ ツリーを生成したい - Marcus Boerger による元のコード例では、いくつかの ASCI 要素が追加されています。問題は、ファイルとディレクトリの並べ替えを制御できないことです。そのため、ディレクトリ ツリーを次のように表示したいと考えています。
代わりに、イテレータによって返されるリストはまったくソートされず、次のように表示されます。
したがって、私が探している解決策は、サブディレクトリがインデックス化されてディレクトリ ツリーに追加されるたびに、ソート メソッドを呼び出す何らかの方法だと思います。
ネイティブではないスピーカーとして、考えを一貫した文章 (または単語でさえも) にまとめるのが難しい場合があります。