foreach($arrayOne as $value){
do function
}
上記の例では、$ arrayOneをループに渡し、$ arrayOneの一部の要素を削除する関数を操作してから、ループがfalseを返すまで残っている要素の縮小された$arrayOneをループで渡します。 。
推奨事項?
配列の一部の要素を削除する関数だけが必要ですか?
その場合は、array_filterを使用できます。
配列項目の値を変更したい場合は、参照によって使用してください。配列項目を完全に削除する場合は、キーと値のペアを分割します。
$arrayOne = array('example', 'listing of', 'stuff');
foreach ($arrayOne as $key => &$value) {
$value .= ' alteration';
if ($value == 'listing of alteration') {
unset($arrayOne[ $key ]);
}
}
上記のコードは、配列内の各項目の末尾にテキスト「alteriation」を追加します。また、「変更のリスト」に一致する場合は、2 番目のインデックスを削除します。PHP 5.2 でテスト済み
2つの配列を使用することをお勧めします
。1つはデータ(dataarray)
、もう1つは最初は空(emptyarray
)で、最初のforeachloopで修飾するものはすべて、2番目の配列にプッシュし、最後に最初の配列を空にして識別子を交換します2つの配列のうち(dataarrayはemptyarrayとその逆になります)、falseなどを返すまで繰り返します
うさぎは、参照を使用して値を編集し、インデックスを foreach ループで設定解除するための正しい答えを持っています (私はあなたに投票しますが、これは私の最初の投稿なので、まだ 15 人の担当者がいません。申し訳ありません)。
値を編集する必要がある関数に参照を渡す場合は、参照を使用することを忘れないでください。配列から値を削除する場合は、配列を参照として渡す必要もあります。
これ以上参照が作成されないように、削除するかどうかについて関数がブール値を返すようにすることをお勧めします。例えば
foreach ($array AS $key => &$value) {
//& reference only needed if execFunction must edit $value
if (execFunction(&$value)) {
unset($array[$key]);
} else {
$value['exec_failed']+=1;
}
}
unset($value);
また、$value 参照はループのスコープを超えて存続するため、後続の unset が設定されません。
最後に、配列を複数回ループしたいように聞こえました。ループの実行が停止する方法に注意してください。
助けてくれてありがとう。unset() 関数は、最終的に、今日の特定のニーズに役立つものです。これが unset() の私の使い方の短い話です:
//array to be processed
$one=array('1','2','3');
//array of terms previously defined as a group to compare against
$against=array('1','2');
foreach($one as $key=>$value){
//pull out matching terms
$match=array_intersect($one,$against);
//my need is to sum grouped numbers
$sum=array_sum($match);
echo $sum."<br />";
//remove matching terms from original array
foreach($match as $key=>$value){
unset($one[$key]);
}
}
//now a parent looping function will process the remaining array elements. In this case, the only one left is '3'.