PHP でデータを走査するときは、list、foreach、および each が一般的に使用されますが、次のチュートリアルでは使用されない場合があります。この方法が皆さんの役に立つことを願っています。 。
プログラミング言語を学習するときは、必ず for を学習し、while を使用して for の効果を書くなどの演習を行ってください。
foreach が存在しない前に、foreach の関数を作成する方法を見てみましょう (達成するには while、list、および each を使用します)。
この記事を参照してください: PHP の前身となる foreach の書き方
コードは次のとおりです
| コードをコピー
|
//古い書き方
リセット($attributes);
while (list($key, $value) = each($attributes)) {
//何かをしてください
}
//PHP4の新バージョン
foreach ($attributes as $key => $value){
//何かをしてください
}
|
多次元連想配列のソート
PHP は、sort()、ksort()、asort() などの配列ソート関数をいくつか提供しますが、多次元連想配列のソートは提供しません。
たとえば、次のような配列:
コードは次のとおりです
| コードをコピー
|
配列
(
[0] => 配列
(
[名前] =>チェス
[価格] => 12.99
)
[1] => 配列
(
[名前] =>チェッカーズ
[価格] => 9.99
)
[2] => 配列
(
[名前] => バックギャモン
[価格] => 29.99
)
)
|
配列を昇順に並べ替えるには、価格を比較する関数を自分で作成し、その関数をコールバック関数として usort() 関数に渡してこの関数を実装する必要があります。
コードは次のとおりです
コードをコピー
|
|
関数comparePrice($priceA, $priceB){
$priceA['価格'] - $priceB['価格'];を返します
}
usort($games, 'comparePrice'); このプログラム フラグメントを実行すると、配列がソートされ、結果は次のようになります。
配列
(
[0] => 配列
(
[名前] =>チェッカーズ
[価格] => 9.99
)
[1] => 配列
(
[名前] =>チェス
[価格] => 12.99
)
[2] => 配列
(
[名前] => バックギャモン
[価格] => 29.99
)
)
配列を降順に並べ替えるには、comparePrice() 関数で 2 つの減算された数値の位置を交換するだけです。
逆の順序で配列を走査します
PHP の While ループと For ループは、配列を走査する最も一般的な方法です。しかし、以下のような配列をどのように反復処理するのでしょうか?
コードは次のとおりです |
コードをコピー |
配列
(
[0] => 配列
(
[名前] => ボード
[ゲーム] => 配列
(
[0] => 配列
(
[名前] = & gt;
[価格] = > 12.99
)
[1] => 配列
(
[名前] = & gt;
[価格] = >9.99
)
)
)
)
|
PHP 標準ライブラリには、コレクション用のイテレータ クラスがあり、これは、いくつかの異種データ構造 (ファイル システムやデータベース クエリ結果セットなど) を走査するために使用できるだけでなく、未知のネストされた配列を反復するためにも使用できます。サイズ。たとえば、上記の配列を走査するには、RecursiveArrayIterator イテレータを使用できます。
コードは次のとおりです
コードをコピー
|
|
$iterator = 新しい RecursiveArrayIterator($games);
iterator_apply($iterator, 'navigateArray', array($iterator));
関数 navigateArray($iterator) {
while ($iterator->valid()) {
if ($iterator->hasChildren()) {
NavigateArray($iterator->getChildren());
} その他 {
Printf("%s: %s", $iterator->key(), $iterator->current());
}
$iterator->next();
}
}
このコードを実行すると、次の結果が得られます:
名前: ボード |
名前:チェス
価格: 12.99
名前:チェッカーズ
価格: 9.99
連想配列の結果をフィルタリングする
次の配列が与えられたが、価格が $11.99 未満の要素のみを操作したいとします。
コードは次のとおりです
コードをコピー
| 配列
( |
[0] => 配列
(
[名前] =>チェッカーズ
[価格] => 9.99
)
[1] => 配列
(
[名前] =>チェス
[価格] => 12.99
)
[2] => 配列
(
[名前] => バックギャモン
[価格] => 29.99
)
)
array_reduce() 関数を使用して簡単に実装できます。
コードは次のとおりです |
コードをコピー |
関数フィルターゲーム($game){
return ($game['price']
}
$names = array_filter($games, 'filterGames');
|
array_reduce() 関数は、コールバック関数を満たさないすべての要素をフィルターで除外します。この例のコールバック関数は filterGames です。価格が 11.99 より低い要素はすべて保持され、その他は削除されます。このコード スニペットの実行結果:
コードは次のとおりです |
コードをコピー |
配列
(
[1] => 配列
(
[名前] =>チェッカーズ
[価格] => 9.99
)
) |
オブジェクトを配列に変換する
要件の 1 つは、オブジェクトを配列形式に変換することです。この方法は思っているよりもはるかに簡単で、強制的に変換するだけで十分です。例:
コードは次のとおりです |
コードをコピー |
クラスゲーム{
パブリック $name;
公開価格;
}
$game = 新しいゲーム();
$game->name = 'チェス';
$ゲーム->価格 = 12.99;
print_r(array($game)); この例を実行すると、次の結果が生成されます。
配列
(
[0] => ゲームオブジェクト
(
[名前] => チェス
[価格] => 12.99
)
)
|
オブジェクトを配列に変換すると、予期しない副作用が生じる可能性があります。たとえば、上記のコード スニペットでは、すべてのメンバー変数はパブリック型ですが、プライベート変数の戻り結果は異なります。別の例を次に示します:
コードは次のとおりです
| コードをコピー
|
クラスゲーム{
パブリック $name;
プライベート $_price;
パブリック関数 setPrice($price) {
$this->_price = $price;
}
}
$game = 新しいゲーム();
$game->name = 'チェス';
$game->setPrice(12.99);
print_r(array($game));このコード スニペットを実行します:
配列
(
[0] => ゲームオブジェクト
(
[名前] => チェス
[_price:ゲーム:プライベート] => 12.99
)
)
|
ご覧のとおり、区別するために、配列に保存されたプライベート変数のキーが自動的に変更されます。
配列の「自然な順序付け」
「英数字」文字列に対する PHP のソート結果は未定義です。たとえば、配列に多数の画像名が保存されているとします。
コードは次のとおりです
| コードをコピー
|
$arr = 配列(
0=>'madden2011.png',
1=>'madden2011-1.png',
2=>'madden2011-2.png',
3=>'madden2012.png'
);
|
この配列をどのようにソートしますか? sort() を使用して配列を並べ替えると、結果は次のようになります:
コードは次のとおりです |
コードをコピー |
配列
(
[0] =>madden2011-1.png
[1] =>madden2011-2.png
[2] =>madden2011.png
[3] =>madden2012.png
) |
これが望ましい場合もありますが、元の添字を保持したい場合はどうすればよいでしょうか?この問題を解決するには、自然な方法で配列を並べ替える natsort() 関数を使用できます。
コードは次のとおりです
| コードをコピー
|
$arr = 配列(
0=>'madden2011.png',
1=>'madden2011-1.png',
2=>'madden2011-2.png',
3=>'madden2012.png'
);
natsort($arr);
echo " "; print_r($arr); echo " ";
?>
実行結果:
配列
(
[1] =>madden2011-1.png
[2] =>madden2011-2.png
[0] =>madden2011.png
[3] =>madden2012.png
)
|
http://www.bkjia.com/PHPjc/632897.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/632897.html技術記事 PHP でデータを走査するときは、list、foreach、および each が一般的に使用されますが、次のチュートリアルでは使用されない可能性があります。配列の走査の高度な例をいくつか紹介したいと思います...
。
|
|