foreach循环的优化
Optimization of foreach loop
我有一组元素,我想先将它们分组,然后再将它们放入数组以发回我的响应。我的循环看起来像这样:
$pages = $section->getPages();
$page_traduction_array = array();
$page_id = null;
foreach ($pages as $page){
if($page_id != $page->getId() && !is_null($page_id)) {
$page_dto = PageTraductionsDto::create($page_traduction_array);
array_push($this->pages, $page_dto);
$page_traduction_array = array();
}
array_push($page_traduction_array, $page);
$page_id = $page->getId();
}
$page_dto = PageTraductionsDto::create($page_traduction_array);
array_push($this->pages, $page_dto);
为了更好地理解,每个页面都有一个由 ID 和语言 ID 组成的复合主键,因此我可以回溯每个页面的每个翻译。
我想知道是否可以做些什么来摆脱循环后的两条指令。有没有什么办法可以全部在数组里面完成?
非常感谢!
我不会担心最后两行,这是尝试使用该方法对数据分组时的常见问题。
另一种方法是重新分组数据...
<?php
error_reporting ( E_ALL );
ini_set ( 'display_errors', 1 );
class Page {
public $id;
public $data;
public function __construct($id, $data) {
$this->id = $id;
$this->data = $data;
}
public function getId() {
return $this->id;
}
}
$pages = [new Page(1,1), new Page(1,2), new Page(2,1) ];
$result = [];
foreach ($pages as $page) {
$result[$page->getId()][] = $page;
}
print_r( $result );
这段代码的核心是 foreach,它给出的结果是...
Array
(
[1] => Array
(
[0] => Page Object
(
[id] => 1
[data] => 1
)
[1] => Page Object
(
[id] => 1
[data] => 2
)
)
[2] => Array
(
[0] => Page Object
(
[id] => 2
[data] => 1
)
)
)
然后您可以在 $result 上输入 foreach
,这将为您提供每个 ID 的所有页面的列表。
我有一组元素,我想先将它们分组,然后再将它们放入数组以发回我的响应。我的循环看起来像这样:
$pages = $section->getPages();
$page_traduction_array = array();
$page_id = null;
foreach ($pages as $page){
if($page_id != $page->getId() && !is_null($page_id)) {
$page_dto = PageTraductionsDto::create($page_traduction_array);
array_push($this->pages, $page_dto);
$page_traduction_array = array();
}
array_push($page_traduction_array, $page);
$page_id = $page->getId();
}
$page_dto = PageTraductionsDto::create($page_traduction_array);
array_push($this->pages, $page_dto);
为了更好地理解,每个页面都有一个由 ID 和语言 ID 组成的复合主键,因此我可以回溯每个页面的每个翻译。
我想知道是否可以做些什么来摆脱循环后的两条指令。有没有什么办法可以全部在数组里面完成?
非常感谢!
我不会担心最后两行,这是尝试使用该方法对数据分组时的常见问题。
另一种方法是重新分组数据...
<?php
error_reporting ( E_ALL );
ini_set ( 'display_errors', 1 );
class Page {
public $id;
public $data;
public function __construct($id, $data) {
$this->id = $id;
$this->data = $data;
}
public function getId() {
return $this->id;
}
}
$pages = [new Page(1,1), new Page(1,2), new Page(2,1) ];
$result = [];
foreach ($pages as $page) {
$result[$page->getId()][] = $page;
}
print_r( $result );
这段代码的核心是 foreach,它给出的结果是...
Array
(
[1] => Array
(
[0] => Page Object
(
[id] => 1
[data] => 1
)
[1] => Page Object
(
[id] => 1
[data] => 2
)
)
[2] => Array
(
[0] => Page Object
(
[id] => 2
[data] => 1
)
)
)
然后您可以在 $result 上输入 foreach
,这将为您提供每个 ID 的所有页面的列表。