PHPの日常的な運用では、配列が最も一般的な構造であり、私たちはほぼ毎日配列関連のコンテンツを扱っています。 では、一般的に配列をどのようにトラバースし処理するのかが問題です。
1、foreach
見覚えがある、君のお気に入りじゃない?
$arr = ['a', 'b', 'c'];
foreach($arr $key => $value) {
$arr[$key] = $value。 「_i」;
}
print_r($arr); [「a_i」「b_i」「c_i」];
2、array_map
配列内の各要素を管理するために匿名関数を使用します。 トラバーサルが完了すると新しい配列が返されます
$arr = ['a', 'b', 'c'];
$arr = array_map(function ($item) {
返$item。 「_i」;
}、$arr);
print_r($arr); [「a_i」「b_i」「c_i」];
複数のアレイを同時に扱うことも可能です
$arr_1 = ['a', 'b', 'c'];
$arr_2 = [「あなた」「善」「is」「original」「sin'];
$arr_n = [...];
$arr = array_map(function ($item_1, $item_2) {
返$item_1。 '_' . $item_2。 「_i」;
}, $arr_1, $arr_2);
print_r($arr); [『a_ you _i』『b_ is good_i』『Are You c__i』『_original _i』『_sin_i』]
はい、通過回数は最も長い配列に基づいています。
3回のトラバース後、$arr_1は実際に完了するため、その後$item_1の値はnullとなります
3、array_walk
配列を参照パスとして走査すると返り値はなく、1つの配列しか処理できません。
$arr = ['a', 'b', 'c'];
array_walk($arr, function (&$item) {
$item = $item。 「_i」;
});
print_r($arr); [「a_i」「b_i」「c_i」];
注意してください & $item、はい、余分な & があり、これはパラメータが参照データを受け取っていることを意味します。 あとはこのパラメータを変える方法を見つけるだけです。
二次元配列を扱う場合、処理方法は切り離せません。
$arr = [
['name' => 'a'],
['name' => 'b'],
['name' => 'c']
];
array_walk($arr, function (&$item) {
$item['name'] = $item['name'] 「_i」;
});
print_r($arr); [['name' => 'a_i'], ['name' => 'b_i'], ['name' => 'c_i']];
4、に対して
これは非常に一般的な構文であるべきです
$arr = ['a', 'b', 'c'];
($i = 0) の場合; カウント$i <($arr); ++$i) {
$arr[$i] = $arr[$i] 。 「_i」;
}
print_r($arr); [「a_i」「b_i」「c_i」];
おすすめしません。 Foreachほど効率的ではありません。 そして、書き方は教えるよりも少し面倒です。
5、各
はは、この機能はPHP7.2@deprecatedで廃止されていて、特に古臭く感じます。 この書き方の実行効率も良くなく、初心者はすぐに諦めるべきです。
$arr = ['a', 'b', 'c'];
一方(list($key, $value) = each($arr)) {
$arr[$key] = $value。 「_i」;
}
print_r($arr); [「a_i」「b_i」「c_i」];
6、リセット
正確に言えば、リセットする関数ではなく、複数の組み込み関数の組み合わせであり、基本的にコード作成には使われていません
$arr = ['a', 'b', 'c'];
reset() ポインタをヘッドに示します。実際にはデフォルトは始まりを指すので、この文は無視しても構いません
reset($arr);
current() で現在のポインタの要素値を得る
一方($value = current($arr)) {
key() を使えば、現在のポインタの要素添字が得られます
$arr[key($arr)] = $value 。 「_i」;
Next() ポインタを次のポインタに
next($arr);
}
print_r($arr); [「a_i」「b_i」「c_i」];
|