PHPでは、 end()とarray_walk()は、さまざまな目的で使用される2つの一般的に使用される配列処理機能です。しかし、実際のコーディングプロセスでは、多くの開発者は、一緒に使用すると競合するか副作用があるかを心配します。この記事では、これら2つの機能の原則と使用を詳細に調査し、実用的な例を使用して、それらを安全に使用できるかどうかを説明します。
end()は、配列の内部ポインターを最後の要素に移動し、その要素の値を返す組み込み関数です。
$array = [1, 2, 3];
$last = end($array); // 戻る 3
注: end()は、配列の内部ポインターに影響します。
array_walk()を使用すると、カスタムコールバック関数を使用して、配列の各要素を反復します。配列の構造や内部ポインターは変更されません。
$array = [1, 2, 3];
array_walk($array, function (&$value, $key) {
$value = $value * 2;
});
// $array なる [2, 4, 6]
答えは、一緒に使用することができ、通常は矛盾することはありませんが、影響力の範囲に注意してください。
$array = [10, 20, 30];
$last = end($array); // ポインターポインター 30
array_walk($array, function (&$value, $key) {
$value += 5;
});
// $array なる [15, 25, 35]
この例では、 end()は内部ポインターの位置を変更しますが、 array_walk()は内部ポインターに依存していないため、2つの間に対立はありません。
$array = [
['url' => 'http://m66.net/page1'],
['url' => 'http://m66.net/page2'],
['url' => 'http://m66.net/page3']
];
array_walk($array, function (&$item, $key) use (&$array) {
$last = end($array);
echo "現在のアイテム URL: {$item['url']},最後のアイテム URL: {$last['url']}\n";
});
このコードは、各コールバックのend($ array)を呼び出します。技術的なエラーはありませんが、コールが呼び出されるたびに内部ポインターがリセットされます。これは、 current() 、 next() 、 prev() 、およびその他の関数のその後の使用に影響を与える可能性があります。したがって:
Array_Walkのコールバックで内部ポインターに依存するEnd()またはその他の機能を頻繁に使用しないことをお勧めします。
end()は通常、最後の要素を取得するために使用され、 array_walk()と組み合わせて使用できますが、コールバック関数の外側で使用してみてください。
コールバックで最後のアイテムを実際に取得する必要がある場合は、キー名と組み合わせたarray_key_last()を介して直接アクセスすることを検討してください。
$lastKey = array_key_last($array);
$lastItem = $array[$lastKey];
この方法は、より安全で効率的な内部ポインターに依存していません。
end()とarray_walk()は一緒に使用できます。ポインターの偶発的な変更によって引き起こされる論理的な問題を回避するために、コールバックで内部ポインターを頻繁に操作しないように注意してください。また、「最後の要素」の要件を扱うために、array_key_last()などのポインターに依存しないメソッドを使用することもお勧めします。
この記事が、これら2つの機能をより安全に使用し、より堅牢なPHPコードを作成するのに役立つことを願っています!