[英]Better way to do this foreach in PHP?
是否有更好的方法来获得与之相同的结果?
foreach($data['report']->result_array() as $k){
$array[] = $k['id'];
}
更好:在这种情况下,意味着更短,更易于阅读或总体上语法更好。
我是新手,欢迎编程社区的意见/建议/一般智慧!
我想不出更好的方法来实现这一目标。
当然,如果您能够更改result_array()函数,则可以引入一个新参数以仅返回id字段。 但是,我认为这会降低代码的可读性。
如果只想从$ data ['report']加载ID,我建议定义一个新的专门方法,该方法返回所有ID 。
如果只想从$ data ['report']的每个元素上由result_array函数返回的数据数组中提取'id'字段并将其放入一个新数组中,那么这大概和您一样高效可以得到。
您对此感到不安吗? 如果我要处理的对象/数据结构对我来说很好(尽管我永远不会将数组变量命名为“ $ array”-像$ idArray这样的名称更合适)。 就是说,我想它已经被适当地评论了,等等。
$array = array_map(function($k) {
return $k['id'];
}, $data['report']->result_array());
您仅限于在“循环”内执行单个操作,因此我不知道它是否符合“更好”的条件。 只是不同而已。
有些人喜欢编程的map / reduce风格,但是在PHP代码中并不是很常见,因为语法不是很好,并且匿名函数只是最近才引入的。
编辑:删除了有关速度比较的位。
这是一种更好的方法(至少我认为是更好的):
$reportIds = array();
$dataArray = $data['report']->result_array();
foreach($dataArray as $reportElement) {
$reportIds[] = $reportElement['id'];
}
它使用了更有意义的变量名(我猜是这样),并且对所发生的事情有些冗长。 请记住,除了正确性之外,可读性比其他所有问题都重要。
当然,根据您正在执行的操作的需要,您还可以编写一种方法来仅获取id(以及result_array()
)或迭代器来为您执行此操作:
class MultiDimensionalArrayIterator extends ArrayIterator {
protected $key = '';
public function __construct(array $array, $key) {
$this->key = $key;
parent::__construct($array);
}
public function current() {
$data = parent::current();
return $data[$this->key];
}
public function offsetGet($index) {
$data = parent::offsetGet($index);
return $data[$this->key];
}
// Implement other overrides to consistently handle iteration
}
用法:
$dataArray = $data['report']->result_array();
$iterator = new MultiDimensionalArrayIterator($dataArray, 'id');
$reportIds = iterator_to_array($iterator);
有很多可能性。 问题来了,您需要什么,其余项目需要什么...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.