foreach($arrayOne as $value){
do function
}
在上面的示例中,我想将 $arrayOne 传递到一个循环中,让一个函数操作删除 $arrayOne 的一些元素,然后让循环传递剩余元素上减少的 $arrayOne 直到循环返回 false .
建议?
你只需要一个函数来删除数组的一些元素吗?
如果是这样,您可以使用array_filter。
如果要修改数组项的值,请按引用使用。如果要完全删除数组项,请拆分键/值对。
$arrayOne = array('example', 'listing of', 'stuff');
foreach ($arrayOne as $key => &$value) {
$value .= ' alteration';
if ($value == 'listing of alteration') {
unset($arrayOne[ $key ]);
}
}
上面的代码会将文本“altering”添加到数组中每个项目的末尾。当它匹配“更改列表”时,它还将删除第二个索引。在 PHP 5.2 上测试
我建议有两个数组,
一个带有数据 - dataarray,
另一个最初为空 - emptyarray
以及第一个 foreachloop 中符合条件的任何内容,你推入第二个数组,最后,清空第一个数组,交换标识符两个数组中的一个(dataarray 变为空数组,反之亦然)并重复,直到您返回 false 或其他
Rabbit 对于使用引用来编辑值和索引以在 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() 的简短故事:
//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'.