我不知道数组是否真的是php上的对象...但是,我想要的是改变foreach循环中的数组行为。
与java类似的东西:
for( String it : myArr = new Array_Iterator( array) implements Iterator{
public Array_Iterator( String[] arr){ this.arr = arr}
/* interface implementation */
}){
/* loop */
}
我真正想要实现的是一种过滤器,因此我不会从阵列中获取我不想要的条目
答案 0 :(得分:3)
您可能正在寻找PHP函数array_filter。
迭代输入中的每个值 数组将它们传递给回调 功能。如果是回调函数 返回true,来自的当前值 输入返回到结果中 阵列。数组键被保留。
如果您喜欢基于迭代器的方法,您还可以查看Standard PHP Library (SPL),特别是ArrayIterator和FilterIterator。
答案 1 :(得分:2)
只需将数组包装到ArrayIterator中,您就可以自由覆盖常规方法。 Spl提供了许多您可能觉得有用的Iterators和Interfaces。要通过迭代器过滤数组,请使用FilterIterator。
PHP手册中的示例:
<?php
// This iterator filters all values with less than 10 characters
class LengthFilterIterator extends FilterIterator {
public function accept() {
// Only accept strings with a length of 10 and greater
return strlen(parent::current()) > 10;
}
}
$arrayIterator = new ArrayIterator(array('test1', 'more than 10 characters'));
$lengthFilter = new LengthFilterIterator($arrayIterator);
foreach ($lengthFilter as $value) {
echo $value . "\n"; // ignores "test1" in array
}
答案 2 :(得分:1)
如果你想要的是一种数组元素的过滤器,请尝试array_filter。创建一个函数,如果要保留该元素,则返回true;如果不保留,则返回false,然后将其传递给array_filter
。