/ / Php:配列内の配列。 PHP配列検索

PHP:配列内の配列。 PHP配列で検索

プログラミングは構文と意味論です。 前者は言語のルールによって決定され、後者は開発者の経験によって決定されます。配列に関しては、開発者は構文にセマンティクスを適用できます。まだオブジェクトではありませんが、従来の意味での配列ではなくなりました。 PHPでは、自分自身を含むさまざまなタイプの変数から配列を作成できます。配列の要素は、関数、つまり、実際のアルゴリズム、実際の意味で配列をロードする機能にすることができます。

構文は安定していますが、バージョンからバージョンと常に上位互換性があるとは限りません。プログラムの移植性は、前世紀の忘れられてきた成果です。セマンティクスは、どの言語のどのバージョンでも開発され、いつでも適用できます。言語の規則が提供しなかったことを表現するために構文構造を使用することが伝統になっています。例として配列を使用すると、これは最も簡単に理解できます。

配列の作成

PHPの配列には、便利な構文と機能があります。このデータ型は事前に説明できますが、必要に応じてオンザフライで配列を作成すると便利な場合があります。

public $ aNone = array(); //配列は記述されており、何も含まれていません

public $ aFact = array( "avocado"、 "peach"、 "cherry"); //この配列には3つの要素があります

いくつかの条件をチェックする過程での配列の作成:

$ cSrcLine = "解析されたデータ行";

for($ i = 0; $ i <13; $ i ++){

$ cUserLine = inputUserLine(); //何かを入力します

if(checkFunc($ cSrcLine、$ cUserLine){

$ aResult [] = "はい"; // PHP配列に追加

} そうしないと {

$ aResult [] = "いいえ";

}

}

この例を実行した結果、13要素の配列。その値は「はい」または「いいえ」のみになります。要素は0から12までのインデックスを受け取ります。以前に「将来の」PHP配列を文字列に書き込むことで同じ効果を得ることができます。

$ cFutureArray = "";

for($ i = 0; $ i <13; $ i ++){

$ cUserLine = inputUserLine(); //何かを入力します

if($ i> 0){$ cFutureArray。= "|"; }

if(checkFunc($ cSrcLine、$ cUserLine){$ cFutureArray。= "はい";

} else {$ cFutureArray。= "いいえ"; }

}

$ aResult = explode( "|"、$ cFutureArray);

文字列へのphp配列

多次元配列

多くのサイト管理システム(SMS)大規模な配列を使用します。これは一方では良い習慣であり、他方では適用が困難になります。著者がPHP-array-in-arrayの原則を理解していても、悪用されるべきではありません。開発者だけが複雑な表記法に慣れる必要があるだけではありません。多くの場合、作成者自身が最初に書いた内容を長い間覚えています。

配列を返す(

"view_manager" =>配列(41、 "template_path_stack" =>配列(__DIR__。 "/../view"、)、

"router" =>配列( "routes" =>配列( "sayhello" =>配列(

"タイプ" => "ZendMvcRouterHttpLiteral"、

"オプション" =>配列( "ルート" => "/ sayhello"、 "デフォルト" =>配列(

"コントローラ" => "HelloworldControllerIndex"、 "アクション" => "インデックス"、)))))、

"コントローラ" =>配列( "呼び出し可能" "=>配列(

"HelloworldControllerIndex" => "HelloworldControllerIndexController"))

);

これは、ZFによる配列サンプルプラクティスのPHP配列です。2.最初はあまり刺激的ではありませんが、機能し、おそらくこのフレームワークを成功させるでしょう(ZendSkeletonApplication / module / Helloworld / config / module.config.php moduleの例)。

PHP配列の要素を削除

配列は重要なデータ構造です設計と開発。その多次元バージョンはかつて人気がありましたが、時間の経過とともに、最大2次元または3次元の配列の必要性が残っています。これはよりシンプルで理解しやすいですが、専門家の観点から見ると、何かが増加し始めたとき、問題のステートメントまたはコードに何かが間違っていることを意味します。

シンプルでアクセスしやすく、理解しやすい

PHPで配列を作成するのが最善です2つまたは3つのレベルに制限されます。安定性と信頼性にもかかわらず、PHPは構文を処理するときに間違いを犯します。かっこやコンマを正確に数えることに慣れている優れたコードエディタを持っていると、これに我慢できます。ただし、PHPはデータ型を制御せず(これは最新のプログラミングのカルマです)、開発者はセマンティックエラーを練習できます。

変数のタイプを制御するルール、またはセマンティクスを構文に変換するという独自のアイデアは、しばしば受け入れがたい贅沢です。これは、スクリプトの速度、コードの可読性の低下です...したがって、コーディングの容易さは常に不可欠です。

PHPには重大な欠点があります。 不確かな場合、スクリプトは単にハングします。すべてのデバッガーが不測の事態を処理するわけではなく、開発者の経験と直感に大きく依存します。アルゴリズムが単純であればあるほど、構造化された情報にアクセスしやすくなるほど、エラーを発見したり、まったく認めない可能性が高くなります。

最初の配列が現れたとき、構造の形のデータの変形が提案されています-異なるタイプのデータから何かを作成する不器用な試み。前者は生き残り、新しい効果的な構文を取得しましたが、後者は歴史的です。

単純な連想配列

2D配列の書き込みは別のペアです括弧「[」と「]」、たとえば:$ aSrcData [1] [2]は、配列$ aSrcDataに含まれる配列[1]の要素[2]を参照することを意味します。 PHPでは、事前にデータを宣言する必要はありません。宣言された情報は、その存在を常に確認できます。

何かを作成することは非常に効果的です必要なときに必要な形で、必要がなくなったときに破壊する。意味のある名前をキー(インデックス)として使用すると、アルゴリズムの現在の場所のコンテキストで意味のある、読みやすい構文を取得できます。

$ aAnketa ["name"] = "Ivanov";
$ aAnketa ["年齢"] = 42;
$ aAnketa ["work"] = "Director";
$ aAnketa ["active"] = true;
$ aTable [] = $ aAnketa;

$ aAnketa ["name"] = "Petrov";
$ aAnketa ["年齢"] = 34;
$ aAnketa ["work"] = "マネージャー";
$ aAnketa ["active"] = true;
$ aTable [] = $ aAnketa;

$ aAnketa ["name"] = "Afanasiev";
$ aAnketa ["年齢"] = 28;
$ aAnketa ["work"] = "ワーカー";
$ aAnketa ["active"] = false;
$ aTable [] = $ aAnketa;

$ sOne。= implode( ";"、$ aTable [1])。 "<br/>"; // 2番目のPHP配列を文字列に
$ sOne。= $ aTable [1] ["work"]; // 2番目の配列の1つの要素にアクセスします

この例の結果(最初の配列は通常で、その中のキーは0から始まり、2番目の配列は連想型で、4つのキーがあります: "name"、 "age"、 "work"、 "active"):

$ sOne = "ペトロフ; 34;マネージャー; 1 <br/>マネージャー";

この簡単な例では、作成されたプロファイルは、すべての従業員に適用できます。従業員番号別のインデックスを持つ従業員の配列を作成できます。特定の従業員が必要な場合は、従業員番号で選択します。

組織に部門がある、またはある場合季節労働者、または退職者を分離する必要がある...配列構造のPHP配列は非常に便利ですが、次元に夢中になってはいけません。 2次元または3次元が効果的なソリューションの限界です。

PHP配列検索

配列を操作するためのキー

以前はすべてがどのように機能するかが重要である場合は、近年、プログラマーが配列の要素がどのように格納されているかを正確に知りたい、そしてそれらに直接アクセスしたいというバイナリ時代の伝統は完全に忘れられていました。メモリ内で複数バイトを占める多くの文字エンコーディングがあります。 「ビット」という単語は現在ビット検索操作でのみ見つかりますが、PHP配列での検索は別のトピックです。要素へのアクセスは、単純で連想的にすることができます。最初のケースでは、配列の要素(PHPで使用可能なタイプのいずれかを持つ)には0、1、2、...の番号が付けられます。2番目のケースでは、プログラマーは独自のインデックスを指定します。多くの場合、目的の値にアクセスするための「キー」と呼ばれます。

$ aLine ["fruit"] = "オレンジ"; //ここではPHP配列キー= "フルーツ"

または(ページとコードのエンコーディングを確認して、すべてが正しいように):

$ aLine [iconv( "utf-8"、 "CP1251"、 "fruit")] = iconv( "utf-8"、 "CP1251"、 "orange");

$ aLine配列に新しい値を追加する場合:

$ aLine [] = iconv( "utf-8"、 "CP1251"、 "peach");
$ aLine [iconv( "utf-8"、 "CP1251"、 "vegetable")] = iconv( "utf-8"、 "CP1251"、 "cucumber");
$ aLine [] = iconv( "utf-8"、 "CP1251"、 "eggplant");

ループ実行の結果として:

foreach($ aLine as $ ck => $ cv){
$ cOne。= $ ck。 「=」。 $ cv。 "<br/>";
}

取得します:

フルーツ=オレンジ
0 =桃
野菜=きゅうり
1 =ナス

要素「peach」と「eggplant」を追加したときの配列のPHPキーは0から順に形成され、その値を指定するとこの値と等しくなります。

配列から要素を削除する

PHPは配列を削除します

最も簡単な方法は、PHP配列の要素を削除することです。それを処理します。この場合、たとえば、ループ実行の結果として、元の配列がスキャンされ、新しい配列が形成されます。この配列には、不要な要素は単に書き込まれません。

簡単にできます。最後の例に当てはめると:

設定解除($ aLine [0]); // PHP配列から要素を削除します

結果は次のようになります:

フルーツ=オレンジ
野菜=きゅうり
1 =ナス

配列要素を操作するためのオプション多くを構築できます。たとえば、関数implode()およびexplode()を使用すると、PHP配列を1つの区切り文字で文字列に書き込み、それを解析して別の区切り文字で別の配列に戻すことができます。

PHPで配列全体を削除するには、次のように記述します。unset($ aLine);

それは十分だ。

配列内を検索

PHPには特別な検索機能が含まれていますarray_keys()、array_values()、array_key_exists()、in_array()を使用することを決定する前に、PHP配列検索を自分で行うことを検討してください。

PHP配列キー

どのプロジェクトにも特定の主題領域があります。構築された配列、特にセマンティクスの一部が構文に転送され、非常に具体的な意味のあるキーのセットで表されている場合。これにより、独自の検索機能を実行できます。これには意味のあるラベルを付けることもできます。

PHPでは、プログラムの実行中に名前が決定される関数を呼び出すことができます。 MSWordドキュメントの読み取りと作成を可能にするPHPWordライブラリの非常に実用的な例:

$ elements = array( "Text"、 "Inline"、 "TextRun"、 "Link"、 "PreserveText"、 "TextBreak"、
「ListItem」、「ListItemRun」、「Table」、「Image」、「Object」、「Footnote」、
"Endnote"、 "CheckBox"、 "TextBox"、 "Field"、 "Line");

$関数=配列();

for($ i = 0; $ i <count($ elements); $ i ++){
$関数[$ i] = "追加"。 $要素[$ i];
}

その結果、$関数配列は$要素配列の値、つまり、ドキュメントの実際の要素を処理する実際の関数の名前を受け取ります。

$要素[4]で$関数[4]を呼び出すと、完璧な検索と高速な結果を得ることができます。

アイテムを並べ替える

データをソートするタスクは不可欠であり、PHPはこのためのいくつかの関数を提供しています:sort()、rsort()、asort()、ksort()、...昇順と降順の要素、2番目の2つの関数はキーと値の関係を保持します。時々、配列の値をランダムにシャッフルすることが理にかなっています-シャッフル()。

php配列の値

PHP関数を使用してソートする場合は、要素にはさまざまなタイプがあるだけでなく、完全に自然なコンテンツもないことを忘れてください。まず、ロシア語の文字を含む文字列の並べ替え、日付の並べ替え、さまざまな形式で記述された数値の並べ替えについては、十分に注意する必要があります。

配列内のphp配列

少なくともスクリプトのテスト段階で、自分で完璧なソリューションを作成するための最良の方法は、手動でソートすることです。彼女は予期しない状況を予測するのに役立ちます。

インライン配列

implode()およびexplode()関数のおかげで、配列簡単に文字列に変換して受け取ることができます。これにより、データをコンパクトな形式で格納し、必要に応じて便利な状態に展開できます。

文字列に変換された配列は、新しい可能性を開きます。たとえば、テキスト内のキーワードを検索するタスクでは、見つかったものを再度追加しないようにする必要があります。

$ cSrcLine = "Text Text ListItemRun TextBox ListItem TextBox Check Box CheckBox TextBox Footnote";

$ aSrc = explode( ""、$ cSrcLine);
$ cDstLine = "";

for($ i = 0; $ i <count($ aSrc); $ i ++){
$ cFind = "["。 $ aSrc [$ i]。 "]";
if(!is_integer(strpos($ cDstLine、$ cFind))){
$ cDstLine。= $ cFind;
}
}
$ aDst = explode( "] ["、$ cDstLine);

$ cOne = implode( ";"、$ aDst);

その結果、変数$ cOneは、元の文字列から一度だけ発生する値「Text; ListItemRun; TextBox; ListItem; Check; Box; CheckBox; Footnote」のみを受け取ります。

キーと値のロシア語

関連するものを使用することはお勧めしません統語構文を使用した国別エンコーディング。ロシア語は、文字がa〜zを超える他のすべての言語と同様に、データ領域に存在し、コード構文には存在しないため、問題を引き起こしません。 「配列をプリンターまたは画面に出力する」という単純なPHPタスクでさえ「krakozyabra」につながり、さらに多くの場合、スクリプトを停止するだけです。

PHPは忠実な言語であり、寛容です国別のコーディングですが、適切な場所に適切なタイミングでキー値が表示されるため、完了した作業量を再度実行しなければならない状況が数多くありますが、これは認識できません。

PHPの構文と言語環境

PHP構文は1つのことですが、この構文の構成要素は、他のアプリケーション、オペレーティングシステム、ハードウェアオプションで「対処」します。多くのオプションがあり、すべてを予見することは決して不可能です。

ルールは、「コードにはコードしかありませんが、入力には、内部と出口には、「予期しない驚きを回避するのに役立つすべての情報があります。配列のPHP値は「ロシア語」にすることができますが、そのキーは、指定された言語の観点からだけでなく、その環境の観点からも構文的に正しい必要があります。